Việc sử dụng đóng gói trong Python là gì?

Để tránh thay đổi ngẫu nhiên, đôi khi các biến đối tượng chỉ có thể được thay đổi bằng các phương thức của đối tượng. Các loại biến đó là biến riêng

Các phương pháp có thể đảm bảo các giá trị chính xác được thiết lập. Nếu một giá trị không chính xác được đặt, phương thức có thể trả về lỗi

khóa học liên quan. Khóa học & bài tập lập trình Python

ví dụ đóng gói

Python không có từ khóa private, không giống như một số ngôn ngữ hướng đối tượng khác, nhưng có thể thực hiện đóng gói

Thay vào đó, nó dựa vào quy ước. một biến lớp không nên được truy cập trực tiếp nên được thêm tiền tố bằng dấu gạch dưới

class Robot(object):
def __init__(self):
self.a = 123
self._b = 123
self.__c = 123

obj = Robot()
print(obj.a)
print(obj._b)
print(obj.__c)

Nếu bạn chạy chương trình, bạn sẽ thấy

123
123
Traceback (most recent call last):
File "test.py", line 10, in <module>
print(obj.__c)
AttributeError: 'Robot' object has no attribute '__c'

Vì vậy, những gì với dấu gạch dưới và lỗi?

Một dấu gạch dưới. Biến riêng tư, nó không nên được truy cập trực tiếp. Nhưng không có gì ngăn bạn làm điều đó (ngoại trừ quy ước)

Dấu gạch dưới kép. Biến riêng tư, khó truy cập hơn nhưng vẫn có thể

Cả hai vẫn có thể truy cập được. Python có các biến riêng theo quy ước

Getters và setters

Các biến riêng tư được dự định thay đổi bằng các phương thức getter và setter. Chúng cung cấp quyền truy cập gián tiếp vào chúng

class Robot(object):
def __init__(self):
self.__version = 22

def getVersion(self):
print(self.__version)

def setVersion(self, version):
self.__version = version

obj = Robot()
obj.getVersion()
obj.setVersion(23)
obj.getVersion()
print(obj.__version)

Điều này sau đó xuất ra các giá trị biến

22
23

Lớp có thuộc tính và phương thức riêng

Các giá trị được thay đổi trong các phương thức lớp. Bạn có thể thực hiện kiểm tra bổ sung, chẳng hạn như nếu giá trị không âm hoặc lớn

Khi làm việc với một ngôn ngữ lập trình hướng đối tượng như Python, encapsulation trong Python là một trong 4 khái niệm quan trọng cần hiểu. Ba cái còn lại là kế thừa, đa hình và trừu tượng

Đóng gói là gì?

Khi làm việc với các lớp và xử lý dữ liệu nhạy cảm, việc cung cấp quyền truy cập toàn cục cho tất cả các biến được sử dụng trong chương trình không phải là một lựa chọn tốt. Đóng gói cung cấp một cách để chúng tôi truy cập các biến cần thiết mà không cung cấp cho chương trình quyền truy cập chính thức vào bất kỳ biến nào trong số đó

Việc cập nhật, sửa đổi hoặc xóa dữ liệu khỏi các biến có thể được thực hiện thông qua việc sử dụng các phương pháp được xác định cụ thể cho mục đích. Lợi ích của việc sử dụng phương pháp lập trình này là cải thiện khả năng kiểm soát dữ liệu đầu vào và bảo mật tốt hơn

Đóng gói trong Python là gì?

Khái niệm đóng gói giống nhau trong tất cả các ngôn ngữ lập trình hướng đối tượng. Sự khác biệt được nhìn thấy khi các khái niệm được áp dụng cho các ngôn ngữ cụ thể

So với các ngôn ngữ như Java cung cấp công cụ sửa đổi quyền truy cập (công khai hoặc riêng tư) cho các biến và phương thức, Python cung cấp quyền truy cập vào tất cả các biến và phương thức trên toàn cầu

Kiểm tra phần trình diễn dưới đây về cách các biến có thể dễ dàng được truy cập

class Person:
    def __init__(self, name, age=0):
        self.name = name
        self.age = age

    def display(self):
        print(self.name)
        print(self.age)

person = Person('Dev', 30)
#accessing using class method
person.display()
#accessing directly from outside
print(person.name)
print(person.age)

đầu ra

Dev
30
Dev
30

Vì chúng tôi không có công cụ sửa đổi quyền truy cập trong Python, nên chúng tôi sẽ sử dụng một số phương pháp khác nhau để kiểm soát quyền truy cập của các biến trong chương trình Python


Phương pháp kiểm soát quyền truy cập

Có nhiều phương thức được Python cung cấp để giới hạn quyền truy cập biến và phương thức trong chương trình. Hãy đi qua các phương pháp chi tiết

Sử dụng dấu gạch dưới đơn

Một quy ước lập trình Python phổ biến để xác định một biến riêng tư là đặt trước nó một dấu gạch dưới. Bây giờ, điều này không thực sự tạo ra bất kỳ sự khác biệt nào về phía trình biên dịch của mọi thứ. Biến vẫn có thể truy cập như bình thường. Nhưng là một quy ước mà các lập trình viên đã chọn, nó nói với các lập trình viên khác rằng các biến hoặc phương thức chỉ được sử dụng trong phạm vi của lớp

Xem ví dụ bên dưới

class Person:
    def __init__(self, name, age=0):
        self.name = name
        self._age = age

    def display(self):
        print(self.name)
        print(self._age)

person = Person('Dev', 30)
#accessing using class method
person.display()
#accessing directly from outside
print(person.name)
print(person._age)

đầu ra

Dev
30
Dev
30

Rõ ràng là truy cập biến không thay đổi. Nhưng chúng ta có thể làm bất cứ điều gì để thực sự làm cho nó riêng tư?


Sử dụng dấu gạch dưới kép

Nếu bạn muốn làm cho các thành viên trong lớp tôi. e. các phương thức và biến riêng tư, thì bạn nên đặt trước chúng hai dấu gạch dưới. Nhưng Python cung cấp một số loại hỗ trợ cho công cụ sửa đổi riêng tư. Cơ chế này được gọi là xáo trộn tên. Với điều này, vẫn có thể truy cập các thành viên lớp từ bên ngoài nó

Tên Mangling

Trong Python, bất kỳ mã định danh nào có __Var đều được trình thông dịch python viết lại thành _Classname__Var và tên lớp vẫn là tên lớp hiện tại. Cơ chế đổi tên này được gọi là Name Mangling trong Python

Trong ví dụ dưới đây, trong Lớp người, biến tuổi đã được thay đổi và nó có tiền tố là dấu gạch dưới kép ở đầu

________số 8_______

đầu ra

Dev
30
Trying to access variables from outside the class
Dev
Traceback (most recent call last):
  File "Person.py", line 16, in 
    print(person.__age)
AttributeError: 'Person' object has no attribute '__age'

Bạn có thể quan sát rằng các biến vẫn được truy cập bằng các phương thức, đây là một phần của lớp. Nhưng bạn không thể truy cập tuổi trực tiếp từ bên ngoài vì đây là biến riêng tư


Sử dụng các phương thức Getter và Setter để truy cập các biến riêng tư

Nếu bạn muốn truy cập và thay đổi các biến riêng tư, nên sử dụng các phương thức truy cập (getter) và bộ biến đổi (phương thức setter), vì chúng là một phần của Class

class Person:
    def __init__(self, name, age=0):
        self.name = name
        self.__age = age

    def display(self):
        print(self.name)
        print(self.__age)

    def getAge(self):
        print(self.__age)

    def setAge(self, age):
        self.__age = age

person = Person('Dev', 30)
#accessing using class method
person.display()
#changing age using setter
person.setAge(35)
person.getAge()

đầu ra

Dev
30
35


Lợi ích của việc đóng gói trong Python

Đóng gói không chỉ đảm bảo luồng dữ liệu tốt hơn mà còn bảo vệ dữ liệu khỏi các nguồn bên ngoài. Khái niệm đóng gói làm cho mã tự cung cấp. Nó rất hữu ích ở cấp độ triển khai, vì nó ưu tiên các câu hỏi loại 'làm thế nào', để lại những câu hỏi phức tạp. Bạn nên ẩn dữ liệu trong đơn vị để dễ dàng đóng gói và cũng để bảo mật dữ liệu

Nhu cầu đóng gói trong Python là gì

Những lý do sau đây cho thấy tại sao các nhà phát triển thấy Encapsulation tiện dụng và tại sao khái niệm Hướng đối tượng vượt xa nhiều ngôn ngữ lập trình

  • Đóng gói giúp đạt được sự tương tác được xác định rõ trong mọi ứng dụng
  • Khái niệm Hướng đối tượng tập trung vào khả năng sử dụng lại mã trong Python. (KHÔ - Đừng lặp lại chính mình)
  • Các ứng dụng có thể được duy trì an toàn
  • Nó đảm bảo tính linh hoạt của mã thông qua một tổ chức mã thích hợp
  • Nó thúc đẩy trải nghiệm mượt mà cho người dùng mà không để lộ bất kỳ sự phức tạp nào của back-end
  • Nó cải thiện khả năng đọc mã. Bất kỳ thay đổi nào trong một phần của mã sẽ không ảnh hưởng đến phần khác
  • Đóng gói đảm bảo bảo vệ dữ liệu và tránh vô tình truy cập dữ liệu. Dữ liệu được bảo vệ có thể được truy cập bằng các phương pháp được thảo luận ở trên

Đóng gói trong Python là, dữ liệu được ẩn bên ngoài định nghĩa đối tượng. Nó cho phép các nhà phát triển phát triển trải nghiệm thân thiện với người dùng. Điều này cũng hữu ích trong việc bảo mật dữ liệu khỏi các vi phạm, vì mã được bảo mật cao và không thể truy cập bởi các nguồn bên ngoài

Việc sử dụng đóng gói là gì?

Đóng gói là một cách để hạn chế quyền truy cập trực tiếp vào một số thành phần của đối tượng, vì vậy người dùng không thể truy cập các giá trị trạng thái cho tất cả các biến của một đối tượng cụ thể. Đóng gói có thể được sử dụng để ẩn cả thành viên dữ liệu và hàm dữ liệu hoặc phương thức được liên kết với một lớp hoặc đối tượng được khởi tạo .

Ưu điểm chính của đóng gói là gì?

Ưu điểm chính của việc sử dụng đóng gói là tính bảo mật của dữ liệu . Lợi ích của việc đóng gói bao gồm. Đóng gói bảo vệ một đối tượng khỏi sự truy cập không mong muốn của khách hàng. Đóng gói cho phép truy cập vào một cấp độ mà không tiết lộ các chi tiết phức tạp bên dưới cấp độ đó.

đóng gói trong Python với ví dụ là gì?

Đóng gói trong Python bằng các thành viên riêng . Để chỉ định một công cụ sửa đổi quyền truy cập riêng tư cho một thành viên, chúng tôi sử dụng dấu gạch dưới kép __. Chúng tôi đã truy cập len cả bên trong và bên ngoài lớp trong đoạn mã trên

Mục đích của việc đóng gói trong OOP là gì?

Đóng gói là một trong những nguyên tắc cơ bản của OOP (lập trình hướng đối tượng). Nó đề cập đến việc gói dữ liệu với các phương thức hoạt động trên dữ liệu đó. Đóng gói được sử dụng để ẩn các giá trị hoặc trạng thái của một đối tượng dữ liệu có cấu trúc bên trong một lớp, ngăn chặn truy cập trực tiếp của các bên trái phép vào chúng .