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

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

如何使用靜態(tài)檢查來確保對象具有特定的方法/屬性?

如何使用靜態(tài)檢查來確保對象具有特定的方法/屬性?

偶然的你 2023-10-06 10:59:12
有沒有辦法可以注釋函數(shù)以確保傳遞到函數(shù)中的對象具有特定的方法或?qū)傩裕也魂P(guān)心它的實際類型?Pycharm 內(nèi)部使用的語法看起來像是指示對象需要哪些方法/屬性,但這似乎不是有效的 Python 語法:def func(a: ):  # Error     a.b = 1有沒有辦法讓類型檢查器協(xié)助鴨子類型,我只關(guān)心對象有什么方法/屬性,而不關(guān)心對象的類型是什么,并且我無法修改我想要檢查的類型?
查看完整描述

1 回答

?
喵喔喔

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

Protocol可以使用。我在這里記錄它是因為我發(fā)現(xiàn)這是一個很難搜索的主題;特別是檢查屬性是否存在。

為了確保屬性的存在:


from typing import Protocol


class HasFoo(Protocol):? ? ?# Define what's required

? ? foo: int


class Foo:? ? ? ? ? ? ? ? ? # This class fulfills the protocol implicitly

? ? def __init__(self):

? ? ? ? self.foo = 1


class Bar:

? ? def __init__(self):? ? ?# This class fails to implicitly fulfill the protocol

? ? ? ? self.bar = 2


def foo_func(f: HasFoo):

? ? pass


foo_func(Foo())? ? ? ? ? ? ?# Type check succeeds

foo_func(Bar())? ? ? ? ? ? ?# Type check fails

請注意 后面的類型提示foo。該行必須在語法上有效,并且類型必須與所檢查屬性的推斷類型相匹配。typing.Any如果您關(guān)心 的存在foo而不是其類型,則可以用作占位符。


同樣,檢查方法也可以這樣做:


class HasFoo(Protocol):

? ? def foo(self):

? ? ? ? pass


class Foo:

? ? def foo(self):

? ? ? ? pass

? ??

class Bar:

? ? def bar(self):

? ? ? ? pass


def func(f: HasFoo):

? ? pass


func(Foo())? ? ? ? ? ? ?# Succeeds

func(Bar())? ? ? ? ? ? ?# Fails

類型檢查是通過Pycharm 2020.2.2.



查看完整回答
反對 回復(fù) 2023-10-06
  • 1 回答
  • 0 關(guān)注
  • 121 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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