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

Python có biến private trong class không?

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ằng from 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.