Skip to main content
 首页 » 编程设计

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

2025年05月04日17虾米哥

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