2017-08-11 28 views
1

下面的代碼:使用回叫,而不考慮實例函數或不

def foo(a): 
    print(a) 


class A(object): 
    callback = foo 
    def do(self): 
     self.callback(1) 


A().do() 

農產品以下錯誤:

Traceback (most recent call last): 
    File "/home/bastien/Projects/test/t.py", line 13, in <module> 
    A().do() 
    File "/home/bastien/Projects/test/t.py", line 10, in do 
    self.callback(1) 
TypeError: foo() takes 1 positional argument but 2 were given 

因爲foo功能用於像一個實例功能。我可以在foo函數上添加@staticmethod裝飾器,但是:有沒有方法可以在不觸摸foo函數的情況下「適應」A.do的行爲?

回答

0

您與self調用它的時候callback它不是實例的一部分,但的類,嘗試做:

class A(object): 
    def __init__(self): 
     self.callback = foo 
    def do(self): 
     self.callback(1) 

這裏有一個live example

0

你可以使用lambda包裝你的功能

def foo(a): 
    print(a) 

class A(object): 
    callback = (lambda self, x: foo(x)) 
    def do(self): 
     self.callback(1) 


A().do()