gpt4 book ai didi

python - 访问 python 属性后面的 "private"变量

转载 作者:太空宇宙 更新时间:2023-11-04 08:02:41 25 4
gpt4 key购买 nike

如何访问 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

关于python - 访问 python 属性后面的 "private"变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37369970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com