ありません。私のコードではさらに上のPythonのクラスの継承:はAttributeError:「[サブクラス]」オブジェクトは、私は、次の基本クラスとサブクラス持って何の属性「XXX」
class Event(object):
def __init__(self, sr1=None, nr1=None, foo=None, foobar=None, nr2=None, sr2=None, flag = False):
self.sr1 = sr1
self.nr1 = nr1
self.foo = foo
self.foobar = foobar
self.nr2 = nr2
self.sr2 = sr2
self.flag = flag
self.state = STATE_NON_EVENT
def state_name(self):
return STATE_NAMES[self.state]
def __repr__(self):
return 'Non event'
# Event class wrappers to provide syntatic sugar
class TypeTwoEvent(Event):
def __init__(self, level=None):
self.sr1 = level
self.state = STATE_EVENT_TWO
def __repr__(self):
return "Type Two event (Level @: {0:.2f})".format(self.sr1)
を、私はのインスタンスを検査していますTypeTwoEventクラスは、私が知っているフィールドが基本クラスに存在するかどうかをチェックしています。値がNoneにデフォルト設定されていると思いました。しかし、私のコードは次の例外を発生させます:
AttributeError: 'TypeTwoEvent' object has no attribute 'foobar'
私は、基本クラスのフィールドはサブクラスによって、ベースクラスをインスタンス化しますサブクラスのインスタンスを作成することを継承されるだろうという印象の下にあった(したがって、そのコンストラクタを呼び出す)...
私はここで何が欠けていますか? TypeTwoEventにfoobar属性がないのはなぜですか?それが由来する基底クラスにはfoobar属性がありますか?
以下に述べるように、スーパークラスを初期化することを明示する必要があります。しかし、__ take care__:複数の継承がある場合、これは非常に繊細になります。 – katrielalex