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

Prefix underscore kép (__) làm gì với biến Python?

Double Underscore Prefix (__name)

Trong Python, dùng __ trước tên attribute khiến attribute đó không truy cập trực tiếp/được nhìn thấy từ bên ngoài. Python thực hiện name mangling: tên class được chèn vào tên attribute.

Theo tài liệu Python: Nếu class dự định được subclass, và bạn có attribute không muốn subclass dùng, hãy đặt tên với double leading underscore. Name mangling giúp tránh collision khi subclass vô tình định nghĩa attribute trùng tên.

Ví dụ

class MyClass:
    __hiddenVar = 0
    
    def add(self, increment):
        self.__hiddenVar += increment
        print(self.__hiddenVar)

obj = MyClass()
obj.add(3)   # 3
obj.add(8)   # 11
print(obj.__hiddenVar)  # AttributeError

Kết quả

3
11
AttributeError: 'MyClass' object has no attribute '__hiddenVar'

Tên thực tế sau mangling: _MyClass__hiddenVar. Vẫn truy cập được nhưng không khuyến khích.