仅在第二次调用后'nested'对象的属性'found'



我有一个奇怪的问题,嵌套/内部对象的属性,这里是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()

最新更新