Cada uno que estoy practicando Python, y encontré algo extraño, aquí está mi código

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

Sin embargo, muestra el error a continuación, uso Python 3.6.4

enter image description here

Después de marcar el código "el super" puede funcionar bien

super (AndGate, self). init (self, 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

Encima de ese código, solo copie de este sitio para el estudio de Python, vea ese sitio en el Listado 11, muestra que este código funciona, pero cuando copio a mi computadora, ¿el código no funcionó? Tengo que marcar la parte "super"? ¿por qué? gracias

enter image description here

0
joe 23 feb. 2018 a las 07:32

3 respuestas

La mejor respuesta

No necesita pasar self aquí:

super(AndGate,self).__init__(self,n)

Debe ser

super(AndGate,self).__init__(n)
1
0xc0de 23 feb. 2018 a las 04:34

Si está utilizando Python 3.3 y superior, debe reemplazar

LogicGate.__init__(self,n)

Con

super().__init__(n) 

Es mejor usar este formato cuando quiera llamar al constructor de superclase.

2
Farshid 30 oct. 2018 a las 05:27

Cuando se utiliza super, self se pasa automáticamente.

Además, en Python3.3 y versiones posteriores, super ni siquiera necesita recibir argumentos para saber de qué clase se está llamando. Simplemente puedes hacer esto.

super().__init__(n)

Esto mejora en gran medida la mantenibilidad, por lo que sería el enfoque preferido.

2
Olivier Melançon 23 feb. 2018 a las 05:31