比方说,我有以下两个类:
class A(object):
def __init__(self, i):
self.i = i
class B(object):
def __init__(self, j):
self.j = j
class C(A, B):
def __init__(self):
super(C, self).__init__(self, 4)
c = C()
c只会设置i属性,而不是j.
我应该写什么来设置两个属性/只有j属性?
解决方法:
如果只想设置j属性,则只调用B .__ init__:
class C(A, B):
def __init__(self):
B.__init__(self,4)
如果你想手动调用A和B的__init__方法,那么
当然你可以这样做:
class C(A, B):
def __init__(self):
A.__init__(self,4)
B.__init__(self,4)
使用super是a bit tricky(特别是,参见标题为“Argument passing,argh!”的部分).如果你仍然想使用super,这是你可以做到的一种方法:
class D(object):
def __init__(self, i):
pass
class A(D):
def __init__(self, i):
super(A,self).__init__(i)
self.i = i
class B(D):
def __init__(self, j):
super(B,self).__init__(j)
self.j = j
class C(A, B):
def __init__(self):
super(C, self).__init__(4)
c = C()
print(c.i,c.j)
# (4, 4)
标签:python
来源: https://codeday.me/bug/20190526/1158134.html