使用在类

时间:2016-05-07 15:59:30

标签: python class methods

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

使用此处讨论的类外定义的方法: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)

1 个答案:

答案 0 :(得分:1)

您必须在“MethodType”中包装传入的函数。

从你的init:

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

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