Error de herencia de clases de Python

     Al escribir herencia de clase recientemente, descubrí que la herencia de Python necesita cambiar los parámetros de la clase base para llamar al constructor de la clase principal. Después de heredar la clase principal, especialmente para la herencia múltiple, descubrí que la transferencia de parámetros no tuvo éxito. Finalmente, modifiqué la clase principal. El orden de las variables miembro es exitoso (los colegas con otras ideas pueden dejar sus propios pensamientos, solo puedo resolver el problema y no he encontrado la razón). La pregunta y todo el código se han subido a github.

Los requisitos son los siguientes

Item es la clase padre, las variables miembro son name y aomunt, y las funciones miembro son operaciones de compra, venta y obtención, respectivamente;

Primero, una subclase de NewBook ​​necesita heredar Item, solo se usa la variable amont y el nombre es una cadena fija. Y solo puede heredar sus variables miembro y sus métodos miembro, y NewBook ​​no puede sobrescribir los métodos y variables de Item. El autor usa dos métodos en la subclase NewBook ​​en el siguiente código para llamar al método de construcción de la clase principal, pero todos fallan. ¡Y reportó el mismo error!

 

#父类
class Item(object):
    def __init__(self,name,amount):
        self.name = name
        self.amount = amount
        
    def buy(self, number):
        self.amount += number

    def sell(self, number):
        self.amount -= number
     
        
    def getName(self):
        return self.name
        
    def getAmount(self):
        return self.amount


#子类
class NewBook(Item):
    def __init__(self,amount):
        #Item.__init__(self,name = "new book",amount)  #第一种方法调用父类构造函数
        super(NewBook, self).__init__(name = "new book"amount)  #第2种方法调用父类构造函数
        
    def buy(self):
        Item.buy(self, number=10)
    
    def sell(self):
        Item.sell(self, number=1)

Resultados del primer método de construcción: 

 

El segundo método informa un resultado de error:

 Debido a que el nombre que quiero pasar es un parámetro fijo y aomunt es un parámetro definido por el usuario, solo se puede pasar así. Entonces, ¿por qué no se puede pasar al constructor de la clase principal, o el constructor de la clase principal no reconoció los parámetros pasados? Después de que modifiqué el orden de paso de los parámetros de la clase principal, este problema se resolvió (el problema mencionado en el título)

class Item(object):
    def __init__(self,amount,name):   #改变部分
        self.name = name
        self.amount = amount
       
        
    def buy(self, number):
        self.amount += number
        

    def sell(self, number):
        self.amount -= number
        
        
    def getName(self):
        return self.name
        
    def getAmount(self):
        return self.amount
        

class NewBook(Item):
    def __init__(self,amount):
       
        super(NewBook, self).__init__(amount,name = "new book") #改变部分
        
    def buy(self):
        Item.buy(self, number=10)
    
    def sell(self):
        Item.sell(self, number=1)

Después de pasar los parámetros predeterminados, la cantidad se coloca al frente

 

Si necesita comprender mejor el motivo y el análisis, puede visitar directamente el almacén para verlo. El fondo del problema y todo el código se han cargado en github

Supongo que te gusta

Origin blog.csdn.net/qq_39463175/article/details/107734171
Recomendado
Clasificación