Python không có biến private thực sự trong class. Mọi biến và method mặc định đều public.
Tuy nhiên, có cơ chế name mangling để mô phỏng private:
_single_underscore: quy ước "internal use" (semi-private). Không import bằngfrom M import *.__double_underscore: name mangling - tên bị biến đổi thành_ClassName__attr, khó truy cập từ bên ngoài hơn (fully private).
Nhưng chúng không thực sự an toàn - vẫn truy cập được qua workaround:
class MyClass:
def __init__(self):
self.__private = "secret"
obj = MyClass()
# Truy cập vẫn được (không khuyến khích)
print(obj._MyClass__private) # secret
Khuyến nghị: Dùng _ cho internal API, __ tránh va tên khi subclass. Không coi đây là bảo mật.