代码之家  ›  专栏  ›  技术社区  ›  hexagonNoah

如何将尚未定义的类的实例放在Python类变量中?

  •  0
  • hexagonNoah  · 技术社区  · 1 年前

    我有两个类,在本例中称之为ClassA和ClassB。我希望在ClassA中有一个类变量,它可以创建ClassA和ClassB的实例,如下例所示:

    class ClassA:
        CLASSVAR=ClassA(ClassB())
        def __init__(self,arg):
            pass
    class ClassB:
        def __init__(self):
            pass
    

    但是,当我尝试执行此操作时,会出现以下错误: NameError: name 'ClassA' is not defined

    是否可以获得类变量 CLASSVAR 创建的实例 ClassA ClassB 没有得到这个错误?

    1 回复  |  直到 1 年前
        1
  •  2
  •   user2357112    1 年前

    您必须在创建类之后分配它:

    class ClassA:
        def __init__(self, arg):
            self.arg = arg
    class ClassB:
        pass
    ClassA.CLASSVAR = ClassA(ClassB())
    

    如果你想安抚mypy,你可以为类变量提供一个注释:

    from typing import ClassVar
    
    class ClassA:
        CLASSVAR: ClassVar['ClassA']
        def __init__(self, arg):
            self.arg = arg
    class ClassB:
        pass
    ClassA.CLASSVAR = ClassA(ClassB())