作为自身实例的类变量

ale*_*wis 0 python variables class

这样的事情可能吗?

class Foo:
    BAR = Foo("bar")
    def __init__(self, name):
        self.name = name
Run Code Online (Sandbox Code Playgroud)

目前这产生NameError: name 'Foo' is not defined.

che*_*ner 5

不,annotations仅适用于变量和函数注释。在class语句完全执行之前,没有Foo要实例化的类。您必须等到Foo定义之后才能创建它的实例。

class Foo:
    def __init__(self, name):
        self.name = name

Foo.BAR = Foo("bar")
Run Code Online (Sandbox Code Playgroud)

您始终可以初始化BAR = None,然后在定义类后更改属性的值。

class Foo:
    BAR = None  # To be a Foo instance once Foo is defined
    ...

Foo.BAR = Foo("bar")  # Fulfilling our earlier promise
Run Code Online (Sandbox Code Playgroud)

出于文档目的,这可能是可取的,以便在Foo.BAR 存在的定义中使其更加清晰,尽管具有不同的值。不过,我想不出有要这样做的情况。