使用类外定义的类方法时出错



我有一个类,我想在初始化时采用任意方法,根据上下文进行字符串解析。

使用在类外定义的方法,如下所述:Python在类定义外定义方法?

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吗?有没有一种方法可以定义函数从而发生这种情况,或者我需要显式地将自参数传递给类外定义的方法:

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)

您必须将传入的函数包装在"MethodType"中。

从您的init:

self.string_method = types.MethodType(string_method, self)

这将方法绑定到类,并允许它接收隐式self参数。确保import types位于脚本的顶部。

最新更新