这将会按照您的要求执行,创建一个新的
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)
myB = B(myA, 10)
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__
不存在
B
拥有一个A
实例属性)?能否给出一个更好地代表你尝试做的事情的非平凡示例? - jonrsharpemyA
创建一个类型为B
的新实例吗?还是你想将现有的myA
“升级”为B
? - Jamie Cockburn