我正在读取property(),我知道属性访问是通过property()中指定的方法进行的。 但是当执行下面的代码时,我得到了“RuntimeError:超出最大递归深度”。当“属性”应用于实例变量“self.x”时,“超出最大递归深度”
class Property(object):
def __init__(self):
self.x = "Raj"
def gettx(self):
print "getting x"
return self.x
def settx(self, val):
print "Setting x"
self.x = val
def dellx(self):
print "deleting"
return self.x
x = property(gettx, settx, dellx, "I'm object property")
p = Property()
print "p.x", p.x
p.x = "R"
print "p.x:", p.x
以这种方式应用财产是不可能的。因为它在'self.x'改为self._x和self.__ x时运行良好。
是的。它的作品自我.__ x和self._x。如果我想要property()作为“公共”实例变量来控制它的访问,会怎样? – rajpy
属性本身(即您的示例中的'x')是公共属性。它需要一个不同的私有存储,但是(即'_x'或'__x')。所以你要控制公共属性('x')并隐藏存储('_x'或'__x')。合理? – isedev
属性名称“x”也是变量混淆了我的名字。 感谢您指出。 – rajpy