第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Python 3.7類實例的靜態(tài)字典

Python 3.7類實例的靜態(tài)字典

互換的青春 2022-10-11 21:11:50
我正在重用一個流行的 C++ 習(xí)語,其中一個類包含一個類實例的靜態(tài)字典: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)在我添加類型注釋之前它工作正常,現(xiàn)在 python 抱怨 Zzz 是未知類型:NameError: name 'Zzz' is not definedfrom typing import Dictclass Zzz:    elements: Dict[str,Zzz] = {} <---- here
查看完整描述

2 回答

?
哈士奇WWW

TA貢獻1799條經(jīng)驗 獲得超6個贊

您可以前向引用您的類型,將其定義為字符串。

from typing import Dict


class Zzz:

    elements: Dict[str, 'Zzz']

順便編輯一下,你可以很容易地自動填充這個實現(xiàn)__init_subclass__()方法的靜態(tài)字典。

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


查看完整回答
反對 回復(fù) 2022-10-11
?
偶然的你

TA貢獻1841條經(jīng)驗 獲得超3個贊

當(dāng)時注釋為“已讀”,Zzz尚不存在。Python 3.7 仍然在定義時評估注釋;在這種情況下,它仍然是未定義的。

Pep563涵蓋了這一點:

from __futures__ import annotations


查看完整回答
反對 回復(fù) 2022-10-11
  • 2 回答
  • 0 關(guān)注
  • 141 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號