以实例为参数的类

我有以下课程:


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]) ** 2

problem = 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......


拉风的咖菲猫
浏览 136回答 1
1回答

largeQ

您只是传入一个简单的单个参数。如果您想复制属性,则必须专门寻找这样的实例并复制出所需的数据。这可以像复制__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. 如果您希望能够引用当前类需要实现的另一个实例的状态和功能,请使用组合。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python