2013-04-18 7 views
18

私は他のクラスのクラスに継承されているクラスAを持っています。これらの関数の中には、似ている関数がいくつかあり、それらの関数を別の場所で定義しておき、それらを必要とするクラスによって呼び出されるとよいでしょう。しかし、これらの関数は、スーパークラスで定義された関数を呼び出します。Python - 自分自身を外部関数に渡すことはできますか?

class A(): 
    def imp_func(*args): 
     # called by the child class functions 

Class B(A): 
    def common_func(self): 
     # some stuff 
     self.imp_func(*args) 

だから私は、引数としてself objectを取る私のヘルパー関数を作成していると私はヘルパー関数の内部からimp_funcを呼び出すことができます。

def helper_func(obj, some_args): 
    # some common stuff 
    obj.imp_func(*args) 

class B(A): 
    def common_func(self): 
     # unique stuff 
     helper_func(self, some_args) 

これは問題を解決します。

私はこれを行う必要がありますか?これはPythonicですか?

+3

それにはまったく問題はありません。 'self'はインスタンスへの参照です。privateではなく、他の関数に渡すのも危険です。 –

+3

なぜこれを行う必要がありますか? 'B'は' A'から 'imp_func'を継承しているので、問題なく' B.common_func'で 'self.imp_func(* args)'を呼び出すことができます。 –

+0

@FlorianBruckerただ一つの関数ではなく、親クラスから呼び出され、いくつかは複数のクラスの複数の関数で2,3回呼び出されます。これは非常に肥大したクラスと機能につながります。これらの関数を書くのにも時間がかかります。ヘルパークラスを使用すると、時間と労力を節約し、コードをきれいに保守しやすくなります。 – elssar

答えて

24

それでも問題はありません。 selfのインスタンスは、常に関数(および他のクラスのメソッド)に渡されます。

関連する問題