7

コードに問題があります。親クラスの属性とメソッドを継承するサブクラスを作成しようとしていますが、機能しません。これが私がこれまでに持っているものです:

class Employee(object): 
  def __init__(self, emp, name, seat):
    self.emp = emp
    self.name = name
    self.seat = seat

以下のコードブロック(サブクラス)に問題があります。

__init__もう一度作成する必要がありますか?また、サブクラスの新しい属性を作成するにはどうすればよいですか。質問を読むと、サブクラスで親クラスがオーバーライドされるように聞こえ__init__ます-別の属性を定義するために呼び出す場合、それは本当ですか?

class Manager(Employee): 
  def __init__(self, reports):
    self.reports = reports
    reports = [] 
    reports.append(self.name) #getting an error that name isn't an attribute. Why? 

  def totalreports(self):
    return reports

Employeeクラスの名前をレポートリストに含めたいです。

たとえば、私が持っている場合:

emp_1 = Employee('345', 'Big Bird', '22 A')
emp_2 = Employee('234', 'Bert Ernie', '21 B')

mgr_3 = Manager('212', 'Count Dracula', '10 C')

print mgr_3.totalreports()

欲しいreports = ['Big Bird', 'Bert Ernie']のに動かない

4

2 に答える 2

9

__init__これらの属性が定義されている親クラスの関数を呼び出したことはありません。

class Manager(Employee): 
  def __init__(self, reports):
    super(Manager, self).__init__()
    self.reports = reports

これを行うには、Employeeクラスの__init__関数を変更し、パラメーターにデフォルト値を指定する必要があります。

class Employee(object): 
  def __init__(self, emp=None, name=None, seat=None):
    self.emp = emp
    self.name = name
    self.seat = seat

また、このコードはまったく機能しません。

  def totalreports(self):
    return reports

reportsのスコープは__init__関数内にのみあるため、未定義になります。self.reportsの代わりに使用する必要がありreportsます。

最後の質問ですが、あなたの構造では、これをうまく行うことはできません。従業員とマネージャーを処理するための3番目のクラスを作成します。

class Business(object):
  def __init__(self, name):
    self.name = name
    self.employees = []
    self.managers = []

  def employee_names(self);
    return [employee.name for employee in self.employees]

適切なリストオブジェクトに従業員を追加して、ビジネスに従業員を追加する必要があります。

于 2012-08-22T05:03:39.033 に答える
1

スーパークラスのinit()を適切な場所で実行し、さらに(サブクラスには不明な)引数をキャプチャして渡す必要があります。

class Manager(Employee): 
  def __init__(self, reports, *args, **kwargs):
    self.reports = reports
    reports = [] 
    super(Manager, self).__init__(*args, **kwargs)
    reports.append(self.name) #getting an error that name isn't an attribute. Why? 
于 2012-08-22T05:05:20.697 に答える