【发布时间】:2021-10-08 18:53:18
【问题描述】:
假设我有一个类A 包含一些基本属性,即
class A:
def __init__(self,name,value,):
self.name = name
self.value = value
我想创建一个子类B,它具有A 的所有属性,但还包括其他方法,例如
class B(A):
def __init__(self,instance_of_A):
# ???
def add_to_value(self,x):
return self.value + x
最终,我想做类似的事情
a = A('my_name',3)
b = B(a)
c = b.add_to_value(2) # c is 5
print(b.name) # should print 'my_name'
有没有办法在创建b 时不显式获取a 的每个属性并将其提供给b 的方法?
【问题讨论】:
-
请从Simple python inheritance开始阅读更多关于继承的信息。
-
如果它是一个非插槽类,你可以做类似
vars(self).update(vars(instance_of_A))的事情 -
为什么要使用现有的
A实例来创建B?为什么不直接编写构造函数,让它接收相同的信息,然后调用super? (或者如果没有额外的构造工作要做,就跳过__init__,从而使用基础构造函数?) -
谢谢@juanpa.arrivillaga,这就是我要找的。我将使用它和
[setattr(self, method, getattr(a,method)) for method in methods]和methods = [attr for attr in dir(a) if callable(getattr(a, attr)) and attr.startswith('__') is False]来给b提供a的方法。
标签: python