簡體   English   中英

Python:創建 class,它的構造函數接受用戶給定的 function,它成為一個方法

[英]Python: Create class whose constructor accepts a user-given function which becomes a method

在 python (3) 中是否有可能有一個 class 的構造函數將 function 作為參數,然后將其轉換為該實例上的方法?

我想做類似的事情:

class Example:
    def __init__(self, val1, val2, user_passed_function):
        self.val1 = val1
        self.val2 = val2
        # this next line doesn't quite get what I'm going for...
        self.upf = user_passed_function

    def user_function_doer(self, *args, **kwargs):
        # THIS LINE IS KEY
        return self.upf(*args, **kwargs)

def upf1(instance, arg):
    return instance.val1 + arg

def upf2(instance, arg):
    return instance.val2 + arg

然后有以下內容:

ex1 = Example(1, 2, upf1)
ex1.user_function_doer(10)
## should return 1 + 10 = 11

ex2 = Example(1, 2, upf2)
ex2.user_function_doer(10)
## should return 2 + 10 = 12

我的實際用例比這要復雜一些,但基本上我希望能夠在實例化時傳遞一個 function,以便稍后能夠訪問實例上的屬性。

可能的?

我相信如果我將# THIS LINE IS KEY評論之后的行改為:

    def user_function_doer(self, *args, **kwargs):
        # THIS LINE IS KEY
        return self.upf(self, *args, **kwargs)

事情可能會順利進行。 但是需要在那里顯式地編寫self參數感覺很奇怪……對於實際的實例方法,它將自動傳遞。 有沒有辦法讓它發生?

您在upf1upf2的定義中提到了一個instance參數
但不要通過self作為return self.upf(*args, **kwargs)

return self.upf(self,*args, **kwargs)解決了這個問題,並且似乎按預期工作

另外...您在def user_function_doer(self,*args, **kwargs):中缺少self

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM