我有以下课程:class Optimization_problem(): def __init__(self, **args): if 'function' in args: self.function = args['function'] if 'gradient' in args: self.gradient = args['gradient'] else: def deriv(x): return nd.Gradient(self.function)(x) self.gradient= deriv if 'acc' in args: self.acc = args['acc']我想创建一个Optmization_method从上面的类继承属性的类,以便我可以执行以下操作:f = lambda x: 100 * (x[1] - x[0] ** 2) ** 2 + (1 - x[0]) ** 2problem = Optimization_problem(function=f, acc=1.e-3)method = Optimization_method(problem) # I want to be able to do this我已经尝试了以下但它不起作用。class Optimization_method(Optimization_problem): def __init__(self, **args): Optimization_problem.__init__(self, **args) #methods......
1 回答
largeQ
TA贡献2039条经验 获得超7个赞
您只是传入一个简单的单个参数。如果您想复制属性,则必须专门寻找这样的实例并复制出所需的数据。这可以像复制__dict__映射一样简单:
if len(args) == 1 and isinstance(args[0], Optimization_problem):
self.__dict__.update(args[0].__dict__)
return
请注意,这与继承无关;继承不会让你从基类复制状态(数据),它让你能够重用和扩展功能。
如果您想重用特定实例的属性,只需存储对 instance 的引用,一个称为composition的概念:
class Optimization_method:
def __init__(self, problem):
self.problem = problem
def method1(self,x):
return self.problem.function(x)
如果您希望Optimization_method实例支持与Optimization_problem. 如果您希望能够引用当前类需要实现的另一个实例的状态和功能,请使用组合。
添加回答
举报
0/150
提交
取消