假设我有一个A类:
class B(A):
def __init(self,x,y,p,q):
A.__init__(self,x,y)
self.p=p
self.q=q
现在,让B继承自A:
ex1 = B(x1,y1,p1,q1)
让ex1成为B的实例:
exA = A(x2,y2)
#something like...
ex1.A = exA
#..so that
print(ex1.x) #yields x2
print(ex1.y) #yeilds y2
是否有一种优雅的方法来创建A的实例并将其属性分配给B?这样
{{1}}
答案 0 :(得分:1)
没有“复制构造函数”这样的东西,如果这就是你所得到的 - 你不能在python中重载=
。但是你可以在B类中轻松定义一个函数:
def fromA(self,someA):
self.x = someA.x
self.y = someA.y
现在ex1.fromA(exA)
会做你想要的。您也可以在A
本身中定义它,可能更有意义。如果您确实在A
或B
中定义了它,那么您可以在init中使用它,如果您愿意:
def __init__(self,p,q,someA):
self.fromA(someA).
self.p = p
self.q = q
编辑如果你想要复制父类的所有属性,那么在父类中放置:
def fromA(self,someA):
for att in someA.__dict__:
self.__dict__[att] = someA.__dict__[att]
如果您在init
之外添加内容,则需要尝试将其包含在内,以确保该属性存在于当前对象中。
答案 1 :(得分:1)
您可以为B编写一个以A作为参数的类方法。
class B(A):
def __init(self, x, y, p, q):
A.__init__(self, x, y)
self.p = p
self.q = q
@classmethod
def fromA(cls, A, p, q):
return cls(A.x, A.y, p, q)
现在你可以做到:
exA = A(x2,y2)
exB = B.fromA(exA, p1, q1)
print(exB.x) #yields x2
print(exB.y) #yeilds y2