2017-02-02 12 views
-1

私はclassの束を持っています。これらはすべて基本クラスから継承しています。それらのうちのいくつかはメソッド(save)を上書きして処理します。この特定のユースケースでは、子供のsaveメソッドを(存在する場合)使用するのを一時的に許可しないで、むしろ親の使用を強制的にsaveメソッドにしたいと考えています。子の外から親メソッドを呼び出す

class BaseClass(object): 
    def save(self, *args, **kwargs): 
     print("Base Called") 

class Foo(BaseClass): 
    def save(self, *args, **kwargs): 
     # do_stuff 
     print("Foo called") 
     return super(Foo, self).save(*args, **kwargs) 

obj = Foo() 

は、どのように私はそれが「と呼ばれるベース」を印刷し、そのようなことを、子供の外から保存obj親を呼び出すことができますか?

+0

をあなたが何を意味するのですか?あなたは「ベースコールされた」だけをプリントすることを意味しますか? –

+0

基本的には子セーブメソッドを完全に無視し、親メソッドのみを実行します – rh0dium

+0

いつでも 'BaseClass.save(obj)'を実行できます。もっと一般的にしたい場合は 'super'を使います。しかし、この**は叫ぶ** "私は継承を使うべきではありません" –

答えて

3

あなたは、私がこれを実行するとsuper()

super(type(obj), obj).save() 

でオブジェクトの親からのメソッドを呼び出すことができます。

class BaseClass(object): 
    def save(self, *args, **kwargs): 
     print("Base Called") 

class Foo(BaseClass): 
    def save(self, *args, **kwargs): 
     # do_stuff 
     print("Foo called") 
     return super(Foo, self).save(*args, **kwargs) 

obj = Foo() 
super(type(obj), obj).save() 

出力:

Base Called 
+0

ダムの質問は動作しますか? – rh0dium

+0

私はそう思う、テストするために走ったコードで答えを編集した。 –

+0

完璧なおかげで! – rh0dium

関連する問題