我有一些代码来创建类层次结构:
class LogicGate:
def __init__(self, n):
self.label = n
self.output = None
class BinaryGate(LogicGate):
def __init__(self, n):
LogicGate.__init__(self, n)
self.pinA = None
self.pinB = None
class AndGate(BinaryGate):
def __init__(self, n):
super(AndGate, self).__init__(self, n)
但是当我尝试创建AndGate
时,发生错误:
>>> AndGate('example')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in __init__
TypeError: BinaryGate.__init__() takes 2 positional arguments but 3 were given
代码有什么问题?为什么错误声称将3个参数提供给BinaryGate.__init__()
?我应该如何正确使用super
?
使用super
时,self
自动传递。
另外,在Python3.3及更高版本中,super
甚至不需要收到参数来了解其称为哪个类。您可以简单地执行此操作。
super().__init__(n)
这大大提高了可维护性,因此这将是首选的方法。
如果您使用的是python 3.3及以上,则应替换
LogicGate.__init__(self,n)
super().__init__(n)
最好在要调用超级类构造函数时使用此格式。
您不需要在此处通过self
:
super(AndGate,self).__init__(self,n)
应该是
super(AndGate,self).__init__(n)