我已经看到了一些关于这个主题的问题,但我还没有找到明确的答案。
我想知道在新的 Python 代码库中使用旧式类的正确方法。例如,假设我有两个固定类A和B。如果我想继承A和B并转换为新型类(A2和B2),这可行。但是,如果我想从A2和B2创建一个新类C ,则会出现问题。
因此,是否可以继续使用此方法,或者如果任何基类被定义为旧样式,则所有类都必须符合旧样式?
请参阅示例代码以进行说明:
class A:
def __init__(self):
print 'class A'
class B:
def __init__(self):
print 'class B'
class A2(A,object):
def __init__(self):
super(A2, self).__init__()
print 'class A2'
class B2(B,object):
def __init__(self):
super(B2, self).__init__()
print 'class B2'
class C(A2, B2):
def __init__(self):
super(C,self).__init__()
print 'class C'
A2()
print '---'
B2()
print '---'
C()
此代码的输出:
class A
class A2
---
class B
class B2
---
class A
class A2
class C
如您所见,问题是在调用 时C()
,B2类从未初始化。
更新 - 新型类示例
我猜不清楚使用super
. 这是一个工作示例,其中对 super 的调用确实会初始化所有基类,而不仅仅是它找到的第一个。
class A(object):
def __init__(self):
super(A, self).__init__()
print 'class A'
class B(object):
def __init__(self):
super(B, self).__init__()
print 'class B'
class A2(A):
def __init__(self):
super(A2, self).__init__()
print 'class A2'
class B2(B):
def __init__(self):
super(B2, self).__init__()
print 'class B2'
class C(A2, B2):
def __init__(self):
super(C, self).__init__()
print 'class C'
C()
并产生输出:
class B
class B2
class A
class A2
class C