为了账号安全,请及时绑定邮箱和手机立即绑定

以实例为参数的类

以实例为参数的类

拉风的咖菲猫 2021-07-01 09:05:33
我有以下课程: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. 如果您希望能够引用当前类需要实现的另一个实例的状态和功能,请使用组合。


查看完整回答
反对 回复 2021-07-21
  • 1 回答
  • 0 关注
  • 126 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信