我有一个奇怪的问题,嵌套/内部对象的属性,这里是foo,只有在调用两次时才被"找到"。这是什么原因呢?
class OuterClass():
def __init__(self, foo_instance):
self.foo_instance = foo_instance
class Foo():
def getdata(self):
return 42
@property
def outputs(self):
self.outputs = self.getdata()
# Main
foo_instance = Foo()
outerbar = OuterClass(foo_instance)
print outerbar.foo_instance.outputs
# wrong output: None
print outerbar.foo_instance.outputs
# correct output: 5
免責聲明
不确定我是否使用了正确的术语,所以请随时更正它们。
这不是您使用属性的方式。
您正在做的是将对象的属性替换为该属性应返回的实际值,这意味着第一次调用outputs
时,outputs
被替换为 getdata
的值,并且函数本身返回 None
。第二次outputs
不再是属性,它是 getdata
的返回值。
使用属性的正确方法是简单地返回值。
class Foo():
def getdata(self):
return 42
@property
def outputs(self):
return self.getdata()
您的第一次访问到达函数的末尾,因此返回None
。作为副作用,它使用实例属性隐藏类属性。第二次访问返回阴影值。
@property
def outputs(self):
return self.getdata()