我正在重用一個流行的 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
提交
取消