2016-11-14 7 views
0

同様の方法で入力を受け取る3つのクラスがありますが、各クラスには異なる数の引数があります。したがって、クラス1はinit関数に7つの引数を持ち、クラス2には4があり、クラス3には5があり、それらのいずれかを初期化できる関数を作成したいと考えています。これを行うにはどうしたらいいですか?通常、私はパラメータp [0]、p [1]などのリストを引数としてクラスに渡しますが、入力量が不明確なので、これをどうやって実行できるのかよくわかりません。入力が不明なクラスを初期化する関数を記述していますか?

+0

任意のコード例をして達成しようとしますか? – Marcin

+0

通常は '* args'を使用します。チュートリアルの[任意の引数リスト](https://docs.python.org/3/tutorial/controlflow.html#arbitrary-argument-lists)を参照してください。いくつかのサンプルコードを見ることなく、より具体的にするのは難しいです。 –

答えて

1

あなたのデザインコンセプトを判断せずに、私はこれを達成するためのもっともらしい方法はすなわち、argsの可変数を持つ関数を書き、その長さに対してチェックすることである数える:

def initializer(*args): 
    num_args = len(args) 
    if num_args == 7: 
     return Class1(*args) 
    elif num_args == 5: 
     return Class3(*args) 
    elif num_args == 4: 
     return Class2(*args) 
    else: 
     # handle this unsupported scenario 

応じてエラーケースを取り扱い。いくつかのサンプルのクラスで

class Class3: 
    def __init__(self, a, b, c, d, e): 
     print(a, b, c, d, e) 

class Class2: 
    def __init__(self, a, b, c, d): 
     print(a, b, c, d) 

class Class1: 
    def __init__(self, a, b, c, d, e, f, g): 
     print(a, b, c, d, e, f, g) 

あなたは必要な効果を得るだろう:あなたが持っているもの

>>> initializer(1, 2, 3, 4) 
1 2 3 4 
<__main__.Class2 at 0x7fe8e450ed68> 
>>> initializer(1, 2, 3, 4, 5) 
1 2 3 4 5 
<__main__.Class3 at 0x7fe8e450ee80> 
>>> initializer(1, 2, 3, 4, 5, 6, 7) 
1 2 3 4 5 6 7 
<__main__.Class1 at 0x7fe8e450e518> 
+0

優秀、ありがとう!私はまだ学んでいて、* argsについて聞いたことがない、これは私の問題を完全に解決する。 – user1917407

関連する問題