gpt4 book ai didi

python - 以实例为参数的类

转载 作者:行者123 更新时间:2023-11-28 18:07:17 25 4
gpt4 key购买 nike

我有以下类(class):

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

最佳答案

您只是传递了一个简单的参数。如果你想复制属性,你必须专门寻找这样的实例并复制出你想要的数据。这可以像复制 __dict__ 映射一样简单:

if len(args) == 1 and isinstance(args[0], Optimization_problem):
self.__dict__.update(args[0].__dict__)
return

请注意,这与继承无关;继承并不赋予您从基类复制状态(数据)的能力,它赋予您重用和扩展功能的能力。

如果您想重用特定实例的属性,只需存储对实例的引用,一个称为组合的概念:

class Optimization_method:    
def __init__(self, problem):
self.problem = problem

def method1(self,x):
return self.problem.function(x)

仅当您希望Optimization_method 实例支持与Optimization_problem 相同的操作时才使用继承。如果您希望能够引用另一个实例的状态和功能以实现当前类需要实现的功能,请使用组合。

关于python - 以实例为参数的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52854407/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com