2011-02-03 20 views
0

私は、インスタンス化する必要のあるクラスだけが異なる私の(最初の!)Pythonプログラムに2つの関数を持っています。Python関数の引数としてクラスを与えるにはどうすればいいですか?

def f(id): 
    c = ClassA(id) 
    ... 
    return ... 

def g(id): 
    c = ClassB(id) 
    ... 
    return ...  

繰り返しコードを回避するために、私は何とかパラメータとしてインスタンス化するクラスを受け入れる単一の関数を書くことができるようにしたいと思います。あなたはそれ(マイナス...複数可)を持っているとまったく同じように動作

def f(id): 
    return f_helper(id, ... ClassA ...) 

def g(id): 
    return f_helper(id, ... ClassB ...) 

def f_helper(id, the_class): 
    c = ... the_class ... (id) 
    ... 
    return ... 

私はこれが可能であるかなり確信しているが、どのように見つけることができませんでした...

答えて

5

>>> class foo: 
    pass 

>>> def make_it(cls): 
    return cls() 

>>> make_it(foo) 
<__main__.foo instance at 0x011D9B48> 

このクラスのコンストラクタにパラメータを取り込み/渡すように変更することもできますが、そのアイデアはまったく問題ありません。クラスはPythonのファーストクラスのオブジェクトです。

4

あなたはほとんどそれを正しく得ました、ちょうど点を落としてください。クラスはファーストクラスの値で、どのオブジェクトでもクラスを参照することができます。 freturn f_helper(id, ClassA)であり、greturn f_helper(id, ClassB)となります。

2

関数に呼び出し可能関数を渡すことができます。クラス自体が呼び出し可能であり、返されるオブジェクトは前記クラスのインスタンスである。

def f_helper(id, the_class): 
    c = the_class(id) 
    # ... 
    return # ... 
関連する問題