0

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

免责声明

不确定我是否使用了正确的术语,因此请随时更正它们。

4

2 回答 2

2

您的第一次访问到达函数的末尾并因此返回None。作为副作用,它用实例属性遮蔽了类属性。第二次访问返回阴影值。

  @property
  def outputs(self):
      return self.getdata()
于 2013-10-14T09:42:26.400 回答
2

这不是你使用属性的方式。

您正在做的是将对象的属性替换为该属性应返回的实际值,这意味着第一次outputs被调用,outputs该值被替换getdata并且函数本身返回None。第二次outputs不再是属性,而是 的返回值getdata

使用属性的正确方法是简单地返回值。

class Foo():
    def getdata(self):
        return 42

    @property
    def outputs(self):
        return self.getdata()
于 2013-10-14T09:42:49.833 回答