4

これは私の宿題です。前にウェブサイトに投稿されたのを見ましたが、未解決のようで、以前その質問をした人とは異なるエラー メッセージが表示されました。

問題の最初の部分は、サブクラス Worker を定義することです。このサブクラスは Employee から継承し、ワーカーのマネージャーである別の従業員を参照する属性を含みます。ワーカーのマネージャーを返すメソッド get_manager を定義する必要があります。

例:

worker = Worker("Fred", 52000, myboss)

問題の 2 番目の部分は、Employee から継承し、年間ボーナスを参照する属性を含むサブクラス Executive を定義することです。

役員の給与とボーナスに基づいて役員報酬を計算するには、wage メソッドをオーバーライドする必要があります。Executive クラスの賃金メソッドの定義では、Employee の賃金メソッドを使用する必要があります。

例:

executive = Executive("Kerry", 520000, 1040000)

私のコードは以下に書かれており、エラーメッセージは次のとおりです。「従業員. init (self,name,salary) ' クラス Executive 用 (Worker クラス用)。なぜそのエラーが発生するのですか?どうすれば修正できますか?

ご協力ありがとうございました!

class Employee(object):
    def __init__(self, name, salary):
        self._name = name
        self._salary = salary

    def my_name(self):
        return self._name

    def wage(self):
        return self._salary/26   # fortnight pay

class Worker(Employee):
    def __init__(self, name, salary, manager):
        Employee.__init__(self, name, salary)
        self._manager = manager

    def getManager(self):
        return self._manager

class Executive(Employee):
    def __init__(self, name, wage, yearlyBonus):
        Employee.__init__(self, name, salary) 
        self._yearlyBonus = yearlyBonus

    def wage(self):
        return Employee.wage(self)
4

4 に答える 4

7

エラーはかなり明確です。のメソッドでsalary定義されていません。__init__Executive

wageの引数として使用しました__init__が、親クラスsalaryを呼び出すとき__init__は、1 つの変数名に固執する必要があります。

class Executive(Employee):
    def __init__(self, name, salary, yearlyBonus):
        Employee.__init__(self, name, salary) 

また、次を使用して、毎回これらのパラメーターをすべて入力することを回避できます*args

class Executive(Employee):
    def __init__(self, *args, yearlyBonus):
        super(Executive, self).__init__(*args)

super()親クラスの__init__メソッドを呼び出す代わりに使用します。これにより、多重継承が少し簡単になります。

于 2013-04-21T07:19:39.070 に答える
5

エラーが発生しているコードを見て、一致しないものに気付くまで探し続けます。

def __init__(self, name, wage, yearlyBonus):
    Employee.__init__(self, name, salary) 
于 2013-04-21T07:19:26.343 に答える
3

はい、init関数にはsalaryという名前の変数がありません。これをEmployeeに渡すとエラーが発生します。初期化

class Executive(Employee):
    def __init__(self, name, wage, yearlyBonus):
        Employee.__init__(self, name, salary) 

これを行うとき

executive = Executive("Kerry", 520000, 1040000)

給料に関係するのはどっち?それを従業員のinitメソッドとして渡しました。Employee コンストラクターを super で呼び出す方が良い

この方法からの推測

def wage(self):
        return self._salary/26   

多分これはあなたが望むものです(ただし、年次ボーナスをどのように計算するかはわかりません)

 class Executive(Employee):
        def __init__(self, name, wage, yearlyBonus):
            Employee.__init__(self, name, wage * 26) 
于 2013-04-21T07:21:07.850 に答える
2

の宣言を見てくださいExecutive.__init__:

def __init__(self, name, wage, yearlyBonus):

という名前の変数を宣言する場所はどこにもありませんsalary。しかし、スーパークラス コンストラクターを呼び出すと、

    Employee.__init__(self, name, salary) 

Python にsalary、3 番目のパラメーターとして名前が付けられた変数の値を渡すように要求しています。Python は、この変数が存在しないと不平を言っているだけです。

そこから修正する方法を考え出すことができると思います。:-)

于 2013-04-21T07:19:51.990 に答える