Python - 将类方法作为另一个类初始化的参数的默认值

时间:2016-10-18 02:06:34

标签: python class methods parameter-passing typeerror

修改原始问题以防止混淆。我在2个不同的模块中定义了2个类:

class Heuristic:
    def process(self,data,x,y):
        processed_data = (data + x) /y 
        return processed_data

class GTS(Abstract_Strat):
    def __init__(self, data, method= Heuristic().process(),*args):
        self.data= data
        self.method = method
        self.func_args = args

所以在GTS类中,在初始化函数中,我试图传递属于另一个模块中的类启发式的方法。在尝试此操作时,我收到以下错误:

TypeError: process() takes exactly 3 arguments (1 given)

我搜索了stackoverflow并找到了Typerror引用_init_方法的类似问题。但在这种情况下,错误是作为_init_方法的参数传入的函数。所以问题是 - 将一个类的方法作为默认参数值传递给另一个类的初始化器的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

在python中,必须先构造一个类的实例,然后才能访问一个对象,然后再访问它的方法。

您可以执行以下操作:

class GTS(Abstract_Strat):
    heuristic = Heuristic(data)
    def __init__(self, data, method= heuristic.process(),*args):
        self.data= data
        self.method = method
        self.func_args = args

从而构建您的对象并允许您访问其" bound"方法。它所指的第一个参数是" self"在定义中,在它是类的实例之前,您没有访问权限已经初始化。

答案 1 :(得分:0)

通过将Heuristic().process()更改为Heuristic().process并将其作为函数参数的默认值传递时,我解决了上述修改过的问题中提到的问题。

还要感谢Andrew对该问题原始版本的评论。