在Python中,构造函数可以将另一个类的方法作为参数吗?
我听说你可以做这样的事情,但这个例子不起作用(目前,我得到的'模块'对象是不可调用的错误):
class GeneticAlgorithm ():
def __init__(self, population, fitness, breed, retain = .3, weak_retain = .15 ) :
self.fitness = fitness
此处,fitness是其他地方定义的函数,请注意我正在导入定义函数的类。
编辑:这是实际产生错误的代码
class Solver( ):
def __init__( self, fitness, breed, iterations ):
self.T = Problem()
self.fitness = fitness
self.breed = breed
self.iterations = iterations
def solve( self ):
P = self.T.population(500)
GA = GeneticAlgorithm(P, self.fitness, self.breed) # problem here
Traceback (most recent call last):
File "C:\Users\danisg\Desktop\Other\Problem.py", line 128, in <module>
main()
File "C:\Users\danisg\Desktop\Other\Problem.py", line 124, in main
t = S.solve()
File "C:\Users\danisg\Desktop\Other\Problem.py", line 74, in solve
GA = GeneticAlgorithm(P, self.fitness, self.breed)
TypeError: 'module' object is not callable
创建解算器的地方
def main():
S = Solver(fitness, breed, 35)
print(S.solve())
if __name__ == '__main__':
main()
答案 0 :(得分:2)
从评论中,问题的根源是:
我做`导入GeneticAlgorithm'。我不应该这样做? - gjdanis
不,这实际上并不正确。您所做的是导入模块,而不是模块内部的类。你有两个选择 - 做一个或另一个:
将导入更改为
from GeneticAlgorithm import GeneticAlgorithm
更改Solver类以使用
GA = GeneticAlgorithm.GeneticAlgorithm(P, self.fitness, self.breed)
我建议将模块从GeneticAlgorithm.py
重命名为不那么令人困惑的东西(genetic_algorithm.py
是一个很好的候选者),然后使用第一个选项从该模块导入该类 - from genetic_algorithm import GeneticAlgorithm
答案 1 :(得分:0)
是的,你可以这样:
def eats_a_method(the_method):
pass
def another_method():
pass
eats_a_method(another_method)
答案 2 :(得分:0)
看看堆栈跟踪:
GA = GeneticAlgorithm(P, self.fitness, self.breed)
TypeError: 'module' object is not callable
它说GeneticAlgorithm
是module
,而不是function
。