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

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

如何在類中使用 dict 作為 switch 語句

如何在類中使用 dict 作為 switch 語句

眼眸繁星 2023-09-12 18:26:44
我試圖在 python 類中使用 dict 作為 switch 語句,如下所示:class MyClass:    METHODS_MAP = {}  # I want to place map here    # some code here    def caller(self, instructions):        methods_map = {            "a": self.a,            "b": self.b        }        for key, value in instructions.items():            methods_map[key](value)    def a(self, val):        print("Called a")    def b(self, val):        print("Called b")a = MyClass()instr = {"b": 12, "a": 14}a.caller(instr)現(xiàn)在它工作得很好,但我需要將methods_map方法定義放置在與靜態(tài)變量相同的級(jí)別,正如有些人可能會(huì)說的那樣。我試過這個(gè):class MyClass:    METHODS_MAP = {        "a": self.a   }或者class MyClass:    METHODS_MAP = {        "a": a   }但無論哪種方式,它都不知道類方法。我怎樣才能讓它按照我的方式工作?
查看完整描述

2 回答

?
慕尼黑的夜晚無繁華

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

您可以將它們添加到構(gòu)造函數(shù)中,如下所示:


class MyClass:

    def __init__(self):

        self.methods_map = {

            "a": self.a,

            "b": self.b

        }


    def caller(self, instructions):

        for key, value in instructions.items():

            self.methods_map[key](value)


    def a(self, val):

        print("Called a")


    def b(self, val):

        print("Called b")



x = MyClass()

instr = {"b": 12, "a": 14}

x.caller(instr)


查看完整回答
反對(duì) 回復(fù) 2023-09-12
?
浮云間

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

為了引用類內(nèi)部實(shí)現(xiàn)的方法,需要以下語法:


METHODS_MAP = 

{

    'a': MyClass.a,

    'b': MyClass.b

}

因?yàn)橛行┖瘮?shù)作用于類實(shí)例而不是@classmethods,所以我們需要更改caller()函數(shù):


from inspect import ismethod


def caller(self, instructions):

    for key, value in instructions.items():

        if METHODS_MAP[key].__self__ is MyClass: # check if function is class method

            METHODS_MAP[key](MyClass, value)

        elif ismethod(METHODS_MAP[key]): # check if method is an instance method

            METHODS_MAP[key](self, value)

        else: # static method

            METHODS_MAP[key](value)

如果所需的函數(shù)不是@classmethod,self將傳遞給它。否則,它將像往常一樣被調(diào)用


重要提示:雖然這個(gè)解決方案看起來比MEHTODS_MAP在__init__()函數(shù)內(nèi)初始化字典更復(fù)雜,但它的成本要低得多。使用此方法,該類擁有的實(shí)例數(shù)量不會(huì)影響在內(nèi)存中創(chuàng)建的次數(shù)METHODS_MAP(始終只有一個(gè))。


使用此處建議的其他方法(使用),將不必要地創(chuàng)建副本__init__()的每個(gè)實(shí)例,因?yàn)樗窃诤瘮?shù)內(nèi)部初始化的MyClass()METHODS_MAP__init__()


查看完整回答
反對(duì) 回復(fù) 2023-09-12
  • 2 回答
  • 0 關(guān)注
  • 127 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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