web-dev-qa-db-ja.com

拡張方法Python class init

基本クラスを作成しました:

class Thing():
    def __init__(self, name):
        self.name = name

クラスを拡張してinitメソッドに追加して、SubThingnametimeの両方のプロパティを持つようにします。どうすればいいのですか?

class SubThing(Thing):
    # something here to extend the init and add a "time" property

    def __repr__(self):
        return '<%s %s>' % (self.name, self.time)

どんな助けも素晴らしいでしょう。

29
MFB

__init__サブクラスでsuperを呼び出して、親の__init__メソッドを適切に:

class SubThing(Thing):
    def __init__(self, *args, **kwargs):
        super(SubThing, self).__init__(*args, **kwargs)
        self.time = datetime.now()

ただし、objectは古いスタイルのクラスでは機能しないため、superから基本クラスのサブクラスを作成してください。

class Thing(object):
    ...
38
Jesse

SubThingに別の__init__メソッドを記述してから、スーパークラスのコンストラクターを呼び出してフィールドを初期化する必要があります。

このQ&Aでは、さらにいくつかの例を示します。

1
mariosangiorgio