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

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

方法可以匿名引用自身嗎?

方法可以匿名引用自身嗎?

幕布斯7119047 2022-09-13 19:54:59
我剛剛寫(xiě)了一個(gè)小函數(shù),它返回自己的參數(shù)作為字典:from inspect import signatureclass MyClass:    def MyFunc(self, thing1=0, thing2=0, thing3=0, thing4="", thing5=""):        P = {}        for p in list(signature(self.MyFunc).parameters):            P[p] = eval(p)        return P   撇開(kāi)為什么有人想這樣做(并接受我從更廣泛的上下文中提煉出一個(gè)非常簡(jiǎn)單的例子來(lái)探索一個(gè)非常具體的問(wèn)題),有一個(gè)明確的參考自我。我的福克在那里。我見(jiàn)過(guò)避免這種情況的復(fù)雜方法,例如:globals()[inspect.getframeinfo(inspect.currentframe()).function]和globals()[sys._getframe().f_code.co_name]但是我想知道是否有類(lèi)似匿名構(gòu)造Python的東西來(lái)引用父類(lèi)中同名的方法,它適用于優(yōu)雅地允許函數(shù)匿名引用自身,即不必命名自己。super()我懷疑不是,從Python 3.8開(kāi)始,沒(méi)有辦法做到這一點(diǎn)。但認(rèn)為這是一個(gè)值得討論和探索的問(wèn)題,并邀請(qǐng)糾正我的懷疑。
查看完整描述

3 回答

?
白豬掌柜的

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

不存在這樣的結(jié)構(gòu)。函數(shù)中的代碼沒(méi)有引用該函數(shù)的特殊方法。

在初始啟動(dòng)后,函數(shù)的執(zhí)行實(shí)際上并不涉及函數(shù)本身。啟動(dòng)后,函數(shù)所需的只是代碼對(duì)象,這是堆棧幀保留引用的唯一部分。您無(wú)法僅從代碼對(duì)象中恢復(fù)函數(shù) - 許多函數(shù)可以共享相同的代碼對(duì)象。


查看完整回答
反對(duì) 回復(fù) 2022-09-13
?
料青山看我應(yīng)如是

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

您可以使用裝飾器執(zhí)行此操作,該裝飾器將參數(shù)列表添加到傳遞給方法的參數(shù)列表中。


相同的方法可以擴(kuò)展到類(lèi)裝飾器中,該類(lèi)裝飾器對(duì)類(lèi)的部分或全部方法執(zhí)行此操作。


下面是單方法修飾器的示例實(shí)現(xiàn):


from inspect import signature


def add_paramlist(func):

    paramlist = list(signature(func).parameters)

    try:

        paramlist.remove('paramlist')

    except ValueError as exc:

        raise RuntimeError(f'"paramlist" argument not declareed in signature of '

                           f'{func.__name__}() method') from exc

    def wrapped(*args, **kwargs):

        return func(paramlist, *args, **kwargs)

    return wrapped



class MyClass:

    @add_paramlist

    def MyFunc(paramlist, self, thing1=0, thing2=0, thing3=0, thing4="", thing5=""):

        P = {}

        for p in paramlist:

            P[p] = eval(p)


        return P



from pprint import pprint


inst = MyClass()

res = inst.MyFunc(thing1=2, thing2=2, thing3=2, thing4="2", thing5="2")

pprint(res)

輸出:


{'self': <__main__.MyClass object at 0x00566B38>,

 'thing1': 2,

 'thing2': 2,

 'thing3': 2,

 'thing4': '2',

 'thing5': '2'}


查看完整回答
反對(duì) 回復(fù) 2022-09-13
?
慕容708150

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

你不能有任何無(wú)黑客的方法從該函數(shù)中獲取函數(shù)的名稱(chēng),但如果你只是希望一個(gè)函數(shù)返回其參數(shù)作為字典,你可以使用這個(gè):


class MyClass:

    def MyFunc(self,**kwargs):

        return kwargs

或者,如果要使用 *args:


class MyClass:

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

        names=["thing%d"%i for i in range(1,6)]

        for v,k in zip(args,names):

            if k in kwargs:

                raise ValueError

            else:

                kwargs[k]=v

        return kwargs

使用包括當(dāng)?shù)厝嗽趦?nèi)的黑客:


class MyClass:

    def MyFunc(self, thing1=0, thing2=0, thing3=0, thing4="", thing5=""):

        d=locals().copy()

        del d["self"]

        return d


查看完整回答
反對(duì) 回復(fù) 2022-09-13
  • 3 回答
  • 0 關(guān)注
  • 94 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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