1

次のように 2 つのクラスを定義しました。

class ClassModel(object):
    pass

class FunctionModel(object):
    attr = None
    def __call__(self):
        return self.attr

アイデアは、 のいくつかのコピーを作成しClassModel、それぞれが から継承するゼロ以上のメソッドを含み、それぞれFunctionModel独自の属性を持つ必要があります。

と の子を作成するのは問題ありませClassModelFunctionModelClassModelしかし、 の子がインスタンス化されたときに、それらにアタッチされた派生元の関数のようなオブジェクトFunctionModelが Python によってメソッドとして認識されるように、2 つをアタッチすることに成功しませんでした。

何が起こるか見てください

>>> func = type('func', (FunctionModel,), {'attr': 'someattr'})
>>> func_inst = func()
>>> func_inst
<__main__.func object at 0x968e4ac>
>>> Cls = type('Cls', (ClassModel,), {'func_inst': func_inst})
>>> cls_inst = Cls()
>>> cls_inst.func_inst
<__main__.func object at 0x968e4ac>

どうすればこれで行けますか?

4

3 に答える 3

0

私はここで完全に間違っているかもしれませんが、確かにあなたは?FunctionModelの親クラスになりたいだけです。ClassModel

class FunctionModel(object):
    attr = None
    def __call__(self):
        return self.attr

class ClassModel(FunctionModel):
    pass

ClassModelのすべての属性を持つようになりましたが、オーバーライドするものにFunctionModel注意してください。__init__メソッドを作成するときはClassModelFunctionModels__init__super()

class ClassModel(FunctionModel):

    def __init__(self, extra_args):
        super(ClassModel, self).__init__()

        self.extra_args = extra_args

Python クラスと継承の詳細については、こちらを参照してください。

于 2013-04-26T09:26:48.957 に答える