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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Python類(lèi)型注解:繼承方法的返回類(lèi)型

Python類(lèi)型注解:繼承方法的返回類(lèi)型

慕的地8271018 2023-04-18 15:30:59
我創(chuàng)建了一個(gè)類(lèi)似字典的自定義類(lèi)來(lái)簡(jiǎn)化跨大型數(shù)據(jù)集的合并評(píng)估指標(biāo)。此類(lèi)實(shí)現(xiàn)了一種__add__方法來(lái)匯總各種指標(biāo)。這是我正在處理的代碼的簡(jiǎn)化版本:from __future__ import annotationsfrom typing import TypeVar, DictT = TypeVar('T', int, float)class AddableDict(Dict[str, T]):    def __add__(self, other: AddableDict[T]) -> AddableDict[T]:        if not isinstance(other, self.__class__):            raise ValueError()        new_dict = self.__class__()        all_keys = set(list(self.keys()) + list(other.keys()))        for key in all_keys:            new_dict[key] = self.get(key, 0) + other.get(key, 0)        return new_dict# AddableIntDict = AddableDict[int]# this would work just fine, however I need to add a few additional methodsclass AddableIntDict(AddableDict[int]):    def some_int_specific_method(self) -> None:        passdef main() -> None:    x = AddableIntDict()    y = AddableIntDict()    x['a'] = 1    y['a'] = 3    x += y  # breaks mypy該程序的最后一行中斷了 mypy (0.782),并出現(xiàn)以下錯(cuò)誤:error: Incompatible types in assignment (expression has type "AddableDict[int]", variable has type "AddableIntDict")這個(gè)錯(cuò)誤對(duì)我來(lái)說(shuō)很有意義。AddableIntDict當(dāng)我定義為 的類(lèi)型別名時(shí),代碼工作正常AddableDict[int],如我的評(píng)論中所述,但是因?yàn)槲倚枰鶕?jù)字典值的類(lèi)型添加其他方法,如 所示some_int_specific_method,我不能簡(jiǎn)單地使用類(lèi)型別名。任何人都可以指出正確的方向,了解如何注釋父類(lèi)的__add__方法,以便它返回調(diào)用類(lèi)的類(lèi)型嗎?(我使用的是 Python 3.8.3)
查看完整描述

1 回答

?
手掌心

TA貢獻(xiàn)1942條經(jīng)驗(yàn) 獲得超3個(gè)贊

self可以通過(guò)使用類(lèi)型變量來(lái)引用“的類(lèi)型”。這解析為調(diào)用該方法的基類(lèi)或子類(lèi)的適當(dāng)類(lèi)型:


from typing import TypeVar, Dict



T = TypeVar('T', int, float)

AD = TypeVar('AD', bound='AddableDict')



class AddableDict(Dict[str, T]):

    def __add__(self: AD, other: AD) -> AD: ...



class AddableIntDict(AddableDict[int]):

    def some_int_specific_method(self) -> None: ...


x = AddableIntDict(a=1)

y = AddableIntDict(a=3)

x += y  # works for mypy and others


查看完整回答
反對(duì) 回復(fù) 2023-04-18
  • 1 回答
  • 0 關(guān)注
  • 212 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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