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.