亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

使用裝飾器改變方法的返回值

使用裝飾器改變方法的返回值

縹緲止盈 2023-04-18 17:08:32
我有一個TextBox和一個Button。當用戶點擊時,我希望點擊Enter與相關的特定按鈕。并且是類。我將實例傳遞到 中,以便我們知道應該單擊一個實例。是一個有 2 個方法和的類。TextBoxTextBoxButtonButtonTextBoxButtonclick()autoclick()我想要的是autoclick()檢查是否Enter按下了鍵,如果按下則click()返回。True我嘗試使用裝飾器并編寫了這個玩具程序來演示我的嘗試。class Button:    def click(self):        return False    def autoclick(self, func, *args):        def wrapper():            func(*args)# This function needes events as it argumnet            return True        return wrapperb = Button()class TextBox:    def __init__(self, button=None):        self.button = button    def box(self):        if enterPressed:            if self.button is not None:                self.button.autoclick(self.button.click, events)()tb = TextBox(button=b)while True:    tb.box()    if b.click():        print("this needs to be printed when user hits enter")我沒有收到任何錯誤,但它根本不起作用。
查看完整描述

2 回答

?
撒科打諢

TA貢獻1934條經驗 獲得超2個贊

我想我現在可能知道你想做什么了。


試試這個。這就是我們通常使用裝飾器的方式。


class Button:

    @autoclick # this is how decorators are used.

    def click(self):

        return False


    def autoclick(self, func):

        def wrapper(*args):

            func(*args)# This function needes events as it argumnet

            return True

        if enterPressed:

            return wrapper

        else:

            return func


查看完整回答
反對 回復 2023-04-18
?
慕的地10843

TA貢獻1785條經驗 獲得超8個贊

我認為以下部分需要修改


class TextBox:

   def __init__(self, button=None):

       self.button = button


   def box(self):

       if enterPressed:

           if self.button is not None:

               self.button.autoclick(self.button.click, events)()

類似于:


class TextBox:

    def __init__(self, button=None):

        self.button = button


    def box(self):

        if enterPressed:

            if self.button is not None:

                self.button.click = self.button.autoclick(self.button.click)  # this line is changed

更新


我想也許你應該是這樣的意思:


class Button:

    def _click(self):  # Maybe this method have events as parameters?

        return False


    def click(self):

        return self._click()


    def autoclick(self):

        def wrapper(*args):

            self._click(*args)  # This function needs events as it arguments

            self.click = self._click

            return True


        self.click = wrapper



class TextBox:

    def __init__(self, button=None):

        self.button = button


    def box(self):

        if enterPressed:

            if self.button is not None:

                self.button.autoclick()

或者也許是這個?:


class Button:

    def _click(self):  # Maybe this method have events as parameters?

        return False


    def click(self):

        return self._click()


    def autoclick(self):

        def wrapper(*args):

            result = self._click(*args)  # This function needs events as it arguments

            if enterPressed:

                return True

            return result


        self.click = wrapper



class TextBox:

    def __init__(self, button=None):

        self.button = button


    def box(self):

        if self.button is not None:

            self.button.autoclick()


查看完整回答
反對 回復 2023-04-18
  • 2 回答
  • 0 關注
  • 109 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號