【发布时间】:2012-01-26 20:41:38
【问题描述】:
我知道由双下划线__ 前缀声明的类的属性在类定义之外可能可见也可能不可见。因为我们仍然可以通过object._className__attrName 访问这些属性。
class A:
def __init__(self):
self.a = 1
self.b = 2
----
----
self.z = 26
self.catch = 100
现在为了保护除catch 属性之外的所有属性,我必须用双下划线声明它们,这很混乱。有没有办法在我的类定义中说只有self.catch 可以在类外访问?
如果这个问题在其他地方得到回答或之前讨论过,我们深表歉意。
【问题讨论】:
-
没有。但是,除非您真的很偏执,否则某人可以使用
object._className__attrName访问对象这一事实并不是什么大问题。您真的只是想防止人们在使用您的代码时意外访问他们不应该访问的变量。混淆实现了这个目标。 -
@BjörnPollex,这不是他想要的。他希望需要一个明确的“公共”“运营商”,而不是相反。
-
你真的需要双下划线吗?为什么不直接使用更标准的单下划线
self._a?
标签: python