我对python很陌生,有没有办法使用父实例构造子类?
嗯,我在想:
class A:
def __init__(self,a,b):
self.a = a
self.b = b
class B(A):
def __init__(self,A):
self.super = A
self.c = -1
def __init__(self,a,b,c):
super(a,b)
self.c = c
myA = A(1,2)
myB = B(myA)
所以对于 B 对象,我可以使用 A 对象来构造它们。
最佳答案
这将按照您的要求执行,并创建一个新的 B
,使用来自现有 A
的数据,然后完成新B
的初始化:
class A(object):
def __init__(self, a, b):
self.a = a
self.b = b
def __str__(self):
return "A: a = %s, b = %s" % (self.a, self.b)
class B(A):
def __init__(self, *args):
if type(args[0]) is A:
self.__dict__ = args[0].__dict__.copy()
c = args[1]
else:
super(B, self).__init__(*args[:2])
c = args[2]
self.c = c
def __str__(self):
return "B: a = %s, b = %s, c = %s" % (self.a, self.b, self.c)
用法:
myA = A(1, 2)
print myA
print B(3,4,5) # regular B
myB = B(myA, 10) # B created from an A
print myB
输出:
A: a = 1, b = 2
B: a = 3, b = 4, c = 5
B: a = 1, b = 2, c = 10
请注意,新实例不会获得数据的新副本,而是获得对该数据的一组新引用。如
a
是 list
你做了 myA.a.append(value)
,然后 myB.a
也会有 value
在里面。如果您不希望出现这种情况,请更改 __dict__
的分配到:self.__dict__ = deepcopy(args[0].__dict__)
注意:如果您使用插槽,这些都不起作用,因为
__dict__
不会存在
关于Python从父类构造子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24921258/