修改原始问题以防止混淆。我在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_
方法的参数传入的函数。所以问题是 - 将一个类的方法作为默认参数值传递给另一个类的初始化器的正确方法是什么?
答案 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对该问题原始版本的评论。