如何访问 Python 属性背后的“私有(private)”变量?
在下面的代码中,我得到了 Hello World 而不是我期望的 World World。我猜测该属性具有不同的范围,导致 self 在属性中与模块不同。如果是这样,有没有办法访问基础变量?或者是否有不同的成语用于“类外的代码应该使用与类内的代码不同的 getter”?
class Foo():
def __init__(self):
self._x = 'Hello'
self.x = 'World'
@property
def x(self):
return self._x
@x.setter
def x(self, val):
self._x = val
foo = Foo()
print(foo._x)
print(foo.x)
请您参考如下方法:
您忘记了从 object 继承,所以您创建了一个旧式类。 property setter 不适用于旧式类。如果您从 object 继承,您会从两个 print 中获得 World,就像您预期的那样:
>>> class Foo(object):
... def __init__(self):
... self._x = 'Hello'
... self.x = 'World'
... @property
... def x(self):
... return self._x
... @x.setter
... def x(self, val):
... self._x = val
...
>>> foo = Foo()
>>> print foo._x
World
>>> print foo.x
World
