我有一个类,我希望在初始化时使用任意方法来根据上下文进行字符串解析。
使用此处讨论的类外定义的方法:Python define method outside of class definition?
def my_string_method(self):
return self.var.strip()
class My_Class():
def __init__(self, string_method):
self.var = ' foo '
self.string_method = string_method
def use_string_method(self):
return self.string_method()
instance = My_Class(string_method=my_string_method)
print instance.use_string_method()
我收到错误" TypeError: use_string_method() takes exactly 1 argument (0 given)
"。
不应将self
参数隐式传递给use_string_method
吗?
有没有办法定义函数,以便发生这种情况,或者我是否需要将self参数显式传递给类外部定义的方法:
class My_Class():
def __init__(self, string_method):
self.var = ' foo '
self.string_method = string_method
def use_string_method(self):
return self.string_method(self)
答案 0 :(得分:1)
您必须在“MethodType”中包装传入的函数。
从你的init:
self.string_method = types.MethodType(string_method, self)
这会将方法绑定到类,并允许它接收隐式self参数。确保您{1}}位于脚本的顶部。