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

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

一次覆蓋所有類方法來(lái)做同樣的事情

一次覆蓋所有類方法來(lái)做同樣的事情

慕村225694 2022-06-14 16:42:25
我正在使用一個(gè) 3rd 方 API,它提供了一個(gè) Python 包裝類,其中包含大約 50 個(gè)方法,除了接受一組任意參數(shù)之外什么都不做。然后,我打算創(chuàng)建自己的類并覆蓋這些方法中的每一個(gè)來(lái)做我真正想要的。我的問(wèn)題:有很多方法需要重寫(xiě),如果他們改變 API,我必須讓我的類與他們的完全匹配:維護(hù)很糟糕。我用的是多處理,想把所有的數(shù)據(jù)打包成msgs,放到一個(gè)隊(duì)列里,結(jié)果在另一個(gè)進(jìn)程中處理,所以我不想把我的數(shù)據(jù)處理邏輯放到這個(gè)類里。他們班級(jí)的精簡(jiǎn)版:class TheirWrapper:    def __init__(self):        pass    def func1(self, a, b, c):        pass    def func2(self, d, e, f):        pass    ... and ~50 more并精簡(jiǎn)了我工作的版本:class MyWrapper:    def addToQueue(self, localvars):        # adds calling function name and localvars to queue (after removing self from localvars)    def func1(self, a, b, c):        self.addToQueue(locals())    def func1=2(self, d, e, f):        self.addToQueue(locals())    ... and ~50 more考慮到我在每個(gè)被覆蓋self.addToQueue(locals())的__init__方法(這樣的事情可能嗎?
查看完整描述

1 回答

?
蕭十郎

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

這是一種使用檢查T(mén)heirWrapperwith內(nèi)容的可能方法dir():


import inspect



class TheirWrapper:

    def __init__(self):

        pass

    def func1(self, a, b, c):

        pass

    def func2(self, d, e, f):

        pass



class MyWrapper:

    def addToQueue(self, localvars):

        # your implementation

        print(localvars)



### You can orginize this block into decorator or metaclass and make more general

def add_func(func_name):

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

        signature = inspect.signature(getattr(TheirWrapper, func_name))

        bind = signature.bind(self, *args, **kwargs)

        arguments = dict(bind.arguments)

        arguments['func_name'] = func_name

        self.addToQueue(arguments)

    return add



for name in dir(TheirWrapper):

    if not name.startswith('__'):

        setattr(MyWrapper, name, add_func(name))

###


w = MyWrapper()

w.func1(1, 2, 3)

# prints {'self': <__main__.MyWrapper object at 0x00000000030262E8>, 'a': 1, 'b': 2, 'c': 3, 'func_name': 'func1'}

檢查簽名和綁定的文檔

目錄的文檔


查看完整回答
反對(duì) 回復(fù) 2022-06-14
  • 1 回答
  • 0 關(guān)注
  • 116 瀏覽
慕課專欄
更多

添加回答

舉報(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)