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

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

僅在函數(shù)接受該參數(shù)時才將參數(shù)傳遞給函數(shù) Python

僅在函數(shù)接受該參數(shù)時才將參數(shù)傳遞給函數(shù) Python

猛跑小豬 2023-01-04 16:22:15
我有一個“驗(yàn)證”方法,其工作方式如下:def validate(self, allow_deferred_fields=False):    """    Validate the data in the group.    Raises ValidationError if there is any incorrect data.    """    # Check custom validation of current group    self.custom_validation()custom_validation 方法因驗(yàn)證的組而異。我的 custom_validation 定義之一我想像這樣傳遞參數(shù)“allow_deferred_fields”:def custom_validation(self, allow_deferred_fields=False):    if allow_deferred_fields:    .... some code但其他 custom_validation 方法不采用此參數(shù)。如何將此參數(shù)傳遞到 validate 方法中的 custom_validation 調(diào)用中,而不必將其作為參數(shù)添加到它可能調(diào)用的所有其他 custom_validation 方法中?
查看完整描述

2 回答

?
米琪卡哇伊

TA貢獻(xiàn)1998條經(jīng)驗(yàn) 獲得超6個贊

這是一個設(shè)計問題。目前,validate的“合同”的一部分是它將調(diào)用一個custom_validation參數(shù)為零的方法。您需要更改validate以接受要傳遞的其他參數(shù):


def validate(self, *args, **kwargs):

    self.custom_validation(*args, **kwargs)

或者您需要將標(biāo)志“嵌入”到對象本身中,以便custom_validation在調(diào)用時可以訪問它。


def validate(self):

    self.custom_validation()


def custom_validation(self):

    if self.allow_deferred_fields:

        ...


...

obj.allow_deferred_fields = True

obj.validate()

不過,第二個選項(xiàng)有點(diǎn)麻煩。這并不比有一個全局變量來custom_validation檢查好多少。


第三個選項(xiàng)是強(qiáng)制所有自定義驗(yàn)證方法在被 調(diào)用時接受(可能是任意的)關(guān)鍵字參數(shù)validate,盡管它們可以自由地忽略該參數(shù)。


查看完整回答
反對 回復(fù) 2023-01-04
?
慕仙森

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個贊

在這種情況下,很難檢查函數(shù)是否接受參數(shù)(請參閱 inspect.signature),但調(diào)用函數(shù)并在函數(shù)不支持參數(shù)時捕獲錯誤非常容易,前提是您知道函數(shù)將永遠(yuǎn)不要引發(fā) TypeError。


這樣做的好處是還可以使用基于 C 的函數(shù)。


def validate(self, allow_deferred_fields=False):

    """

    Validate the data in the group.

    Raises ValidationError if there is any incorrect data.

    """

    # Check custom validation of current group

    try:

        self.custom_validation(allow_deferred_fields=True)

    except TypeError:

        self.custom_validation()

如果你不能依賴函數(shù)永遠(yuǎn)不會拋出 TypeError,你可以嘗試以下方法,但請記住,如果函數(shù)是用 C 實(shí)現(xiàn)的,它將失敗


def validate(self, allow_deferred_fields=False):

    """

    Validate the data in the group.

    Raises ValidationError if there is any incorrect data.

    """

    # Check custom validation of current group

    if "allow_deferred_fields" in inspect.signature(self.custom_validation):

        self.custom_validation(allow_deferred_fields=True)

    else:

        self.custom_validation()


查看完整回答
反對 回復(fù) 2023-01-04
  • 2 回答
  • 0 關(guān)注
  • 165 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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