【发布时间】:2020-02-18 20:22:08
【问题描述】:
这样的事情可能吗?
class Foo:
BAR = Foo("bar")
def __init__(self, name):
self.name = name
目前这会产生NameError: name 'Foo' is not defined。
【问题讨论】:
这样的事情可能吗?
class Foo:
BAR = Foo("bar")
def __init__(self, name):
self.name = name
目前这会产生NameError: name 'Foo' is not defined。
【问题讨论】:
没有。 annotations 仅适用于变量和函数注释。在class 语句完全执行之前,没有要实例化的类Foo。您必须等到Foo 被定义后才能创建它的实例。
class Foo:
def __init__(self, name):
self.name = name
Foo.BAR = Foo("bar")
您总是可以初始化BAR = None,然后在定义类之后更改属性的值。
class Foo:
BAR = None # To be a Foo instance once Foo is defined
...
Foo.BAR = Foo("bar") # Fulfilling our earlier promise
这对于文档目的可能是可取的,以便在定义中更清楚地说明Foo.BAR 将 存在,尽管具有不同的值。不过,我想不出这种情况是必要的。
【讨论】: