Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Private Variables (Biến riêng tư) trong Python

Thực tế, Python không có khái niệm private member variable. Tuy nhiên, quy ước thêm hai gạch dưới (__) ở đầu biến/phương thức để làm cho nó private được dùng bởi hầu hết code Python.

Ví dụ: privateVar1.py

class myClass:
    __privateVar = 27
    def __privMeth(self):
        print("I'm inside class myClass")
    def hello(self):
        print("Private Variable value: ", myClass.__privateVar)

foo = myClass()
foo.hello()
foo.__privateMeth

Trong chương trình: __privMeth là phương thức private, __privateVar là biến private. Kết quả:

Kết quả

Private Variable value: 27
Traceback (most recent call last):
  File "C:/Python/Python361/privateVar1.py", line 12, in 
    foo.__privateMeth
AttributeError: 'myClass' object has no attribute '__privateMeth'

Từ kết quả: bên ngoài class "myClass", không thể truy cập phương thức private cũng như biến private. Tuy nhiên, bên trong class (myClass) có thể truy cập biến private. Trong phương thức hello(), biến __privateVar được truy cập (hiển thị: "Private Variable value: 27").

Từ ví dụ: tất cả biến và phương thức trong class mặc định là public. Khi khai báo thành private, nghĩa là chỉ truy cập được bên trong class, không truy cập được bên ngoài. Kỹ thuật này gọi là data mangling (xáo trộn dữ liệu).

Mọi identifier dạng __spam (ít nhất hai gạch dưới đầu, tối đa một gạch dưới cuối) sẽ bị thay thế văn bản thành _classname__spam, trong đó classname là tên class hiện tại với gạch dưới đầu bị bỏ. Xáo trộn này diễn ra không quan tâm vị trí cú pháp, miễn là xảy ra trong định nghĩa class.

Tên với double underscore nhằm tránh ghi đè (overriding) ngẫu nhiên bởi subclass.