最近クラス継承を書いているときに、Pythonの継承では、親クラスのコンストラクターを呼び出すために基本クラスのパラメーターを変更する必要があることがわかりました。親クラスを継承した後、特に多重継承の場合、パラメーターが転送されることがわかりました。最後に、親クラスを変更しました。メンバー変数の順序は成功しています(他のアイデアを持つ同僚は、自分の考えを残すことができます。問題を解決することしかできず、理由は見つかりませんでした)。質問とすべてのコードがgithubにアップロードされました。
要件は次のとおりです
Itemは親クラスであり、メンバー変数はnameとaomuntであり、メンバー関数はそれぞれ購入、販売、および取得操作です。
まず、NewBookのサブクラスはItemを継承する必要があり、amont変数のみが使用され、名前は固定文字列です。また、メンバー変数とメンバーメソッドのみを継承でき、NewBookはItemメソッドと変数を上書きできません。著者は、次のコードのサブクラスNewBookの2つのメソッドを使用して、親クラスの構築メソッドを呼び出しますが、すべて失敗します。そして、同じエラーを報告しました!
#父类
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)
最初の工法の結果:
2番目の方法は、エラー結果を報告します。
渡したい名前は固定パラメーターであり、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にアップロードされています