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