我正在重用一个流行的 C++ 习语,其中一个类包含一个类实例的静态字典:class Zzz: elements = {} def __init__(self, name): self._name = name Zzz.elements[name] = self @staticmethod def list_instances(): for k in Zzz.elements.items(): print(k)在我添加类型注释之前它工作正常,现在 python 抱怨 Zzz 是未知类型:NameError: name 'Zzz' is not definedfrom typing import Dictclass Zzz: elements: Dict[str,Zzz] = {} <---- here
2 回答

哈士奇WWW
TA贡献1799条经验 获得超6个赞
您可以前向引用您的类型,将其定义为字符串。
from typing import Dict
class Zzz:
elements: Dict[str, 'Zzz']
顺便编辑一下,你可以很容易地自动填充这个实现__init_subclass__()
方法的静态字典。
class Zzz:
elements: Dict[str, 'Zzz'] = {}
name: str
def __init_subclass__(cls, **kw):
cls.elements[cls.name] = cls
class ZzzImpl(Zzz):
name = 'foo'
assert Zzz.elements['foo'] is ZzzImpl
添加回答
举报
0/150
提交
取消