Tôi biết rằng các thuộc tính của lớp được khai báo bằng dấu gạch dưới kép tiền tố __
có thể hoặc không thể nhìn thấy bên ngoài định nghĩa lớp. Vì chúng tôi vẫn có thể truy cập các thuộc tính đó theo object._className__attrName
.Ẩn dữ liệu trong lớp Python
class A:
def __init__(self):
self.a = 1
self.b = 2
----
----
self.z = 26
self.catch = 100
Bây giờ để bảo vệ tất cả các thuộc tính ngoại trừ thuộc tính catch
, tôi phải khai báo chúng với dấu gạch dưới kép khá lộn xộn. Có cách nào tôi có thể nói trong định nghĩa lớp học của tôi rằng chỉ có thể truy cập self.catch
bên ngoài lớp học?
Xin lỗi nếu điều này được trả lời ở nơi khác hoặc được thảo luận trước đó.
No. Tuy nhiên, trừ khi bạn thực sự hoang tưởng, thực tế là ai đó * có thể * truy cập một đối tượng bằng cách sử dụng 'object._className__attrName' không phải là một vấn đề lớn. Bạn thực sự chỉ muốn ngăn mọi người vô tình truy cập vào các biến mà họ không nên khi sử dụng mã của bạn. Các obfuscation đạt được mục tiêu đó. – Chris
có thể trùng lặp của [Có python có 'tư nhân' biến trong các lớp học?] (Http://stackoverflow.com/questions/1641219/does-python-have-private-variables-in-classes) –
@ BjörnPollex, đây isn ' những gì anh ta yêu cầu. Anh ta muốn sự cần thiết của một nhà điều hành "công khai" rõ ràng, không phải ngược lại. –