파이썬 클래스 상속 버그

     최근에 클래스 상속을 작성할 때 부모 클래스의 생성자를 호출하기 위해 파이썬 상속이 기본 클래스의 매개 변수를 변경해야한다는 것을 발견했습니다. 특히 다중 상속의 경우 부모 클래스를 상속 한 후 매개 변수 전송이 마지막으로 부모 클래스를 수정했습니다. 멤버 변수의 순서가 성공적이었습니다 (다른 아이디어를 가진 동료는 자신의 생각을 남겨도 괜찮습니다. 문제 만 해결할 수 있으며 이유를 찾지 못했습니다). 질문과 모든 코드가 github 에 업로드되었습니다 .

요구 사항은 다음과 같습니다.

Item은 부모 클래스이고 멤버 변수는 name과 aomunt이며 멤버 함수는 각각 buy, sell 및 get 작업입니다.

첫째, NewBook의 하위 클래스는 Item을 상속해야하며 amont 변수 만 사용되며 이름은 고정 문자열입니다. 또한 멤버 변수와 멤버 메서드 만 상속 할 수 있으며 NewBook은 Item 메서드와 변수를 덮어 쓸 수 없습니다. 저자는 다음 코드의 하위 클래스 NewBook에서 두 가지 메서드를 사용하여 부모 클래스 생성 메서드를 호출하지만 모두 실패합니다. 그리고 같은 오류를보고했습니다!

 

#父类
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)

첫 번째 건설 방법의 결과 : 

 

두 번째 방법은 오류 결과를보고합니다.

 전달하고자하는 이름은 고정 매개 변수이고 aomunt는 사용자 정의 매개 변수이기 때문에 이렇게 만 전달할 수 있습니다. 그러면 왜 부모 클래스의 생성자에게 전달되지 않거나 부모 클래스의 생성자가 전달 된 매개 변수를 인식하지 못합니까? 부모 클래스의 매개 변수 전달 순서를 수정 한 후이 문제가 해결되었습니다 (문제 제목에 언급)

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)

기본 매개 변수를 전달하면 금액이 앞에 배치됩니다.

 

그 이유와 분석에 대한 이해가 더 필요한 경우 창고를 직접 방문하여 볼 수 있습니다. 문제 배경과 모든 코드가 github 에 업로드되었습니다.

추천

출처blog.csdn.net/qq_39463175/article/details/107734171