我对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对象来构造它们。
答案 0 :(得分:2)
这将按照您的要求执行,并使用现有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__
将不存在
答案 1 :(得分:0)
您可以利用以下事实:
class
是可执行语句; 例如:
class A(object):
pass
def CreateB(superclass):
class subclass(superclass):
pass
return subclass
B = CreateB(A)
myA = A()
myB = B()
那就是说,我并不完全清楚你要解决的实际问题是什么。
答案 2 :(得分:0)
在您的示例中,类中的方法需要第一个参数来引用它们自己。通常这被命名为self
。
class A:
pass #class A code
class B(A):
def __init__(self, a):
self.super = a
myA = A()
myB = B(myA)
上面的代码将创建一个B实例,其中引用了一个名为super的A实例。如果你希望B从A继承,那么你会稍微改变一下代码。
class A:
pass #class A code
class B(A):
def __init__(self):
A.__init__(self)
myA = A()
myB = B()