每一个我练习Python的人,我发现了一些奇怪的东西,这是我的代码
LogicG.py
class LogicGate:
def __init__(self,n):
self.label = n
self.output = None
def getLabel(self):
return self.label
def getOutput(self):
self.output = self.performGateLogic()
return self.output
class BinaryGate(LogicGate):
def __init__(self,n):
LogicGate.__init__(self,n)
self.pinA = None
self.pinB = None
def getPinA(self):
return int(input("Enter Pin A input for gate "+ self.getLabel()+"-->"))
def getPinB(self):
return int(input("Enter Pin B input for gate "+ self.getLabel()+"-->"))
class UnaryGate(LogicGate):
def __init__(self,n):
LogicGate.__init__(self,n)
self.pin = None
def getPin(self):
return int(input("Enter Pin input for gate "+ self.getLabel()+"-->"))
class AndGate(BinaryGate):
def __init__(self,n):
super(AndGate,self).__init__(self,n)
def performGateLogic(self):
a = self.getPinA()
b = self.getPinB()
if a==1 and b==1:
return 1
else:
return 0
然而,它显示下面的错误,我使用python 3.6.4
在我标出代码“超级”之后它可以正常工作
超级(AndGate,自我)。的初始化(个体,n)的
class AndGate(BinaryGate):
# def __init__(self,n):
# super(AndGate,self).__init__(self,n)
def performGateLogic(self):
a = self.getPinA()
b = self.getPinB()
if a==1 and b==1:
return 1
else:
return 0
上面那些代码只是我从这个site复制python学习,看清单11中的那个站点,它显示这些代码工作,但是当我复制到我的电脑时,代码不起作用?我要标出“超级”部分?为什么?谢谢
答案 0 :(得分:2)
使用super
时,会自动传递self
。
此外,在Python3.3及更高版本中,super
甚至不需要接收参数来知道它正在调用哪个类。你可以这么做。
super().__init__(n)
这极大地提高了可维护性,因此它将成为首选方法。
答案 1 :(得分:2)
如果您使用的是Python 3.3及更高版本,则应替换
LogicGate.__init__(self,n)
与
super().__init__(n)
当您要调用超类构造函数时,最好使用这种格式。
答案 2 :(得分:1)
您无需在此处传递self
:
super(AndGate,self).__init__(self,n)
应该是
super(AndGate,self).__init__(n)