同様の方法で入力を受け取る3つのクラスがありますが、各クラスには異なる数の引数があります。したがって、クラス1はinit関数に7つの引数を持ち、クラス2には4があり、クラス3には5があり、それらのいずれかを初期化できる関数を作成したいと考えています。これを行うにはどうしたらいいですか?通常、私はパラメータp [0]、p [1]などのリストを引数としてクラスに渡しますが、入力量が不明確なので、これをどうやって実行できるのかよくわかりません。入力が不明なクラスを初期化する関数を記述していますか?
0
A
答えて
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
関連する問題
- 1. 日付関数でクラス変数を初期化しますか?
- 2. 標準入力で関数を初期化する
- 3. 入力値を使用して出力を初期化する
- 4. 関数の入力タイプを明示的に記述するときはいつですか?
- 5. JPA関係マッピングを初期化するか、初期化しないか?
- 6. 不明な長さのnumpy配列を初期化する
- 7. 異なる文字列に基づいて異なるクラスを入力として初期化する
- 8. JLabelはコードを記述しても不透明になりませんか?
- 9. 不明なクラス+関数をコールバック
- 10. 初期化関数で静的クラスメンバーを初期化する
- 11. VB.NETクラスの初期化と関数
- 12. TypeScriptの引数としてクラスを取る関数のパラメータを記述する
- 13. コードを書く前に関数を明確に記述する
- 14. 関数からクラスオブジェクトにアクセスできない不明なクラスがあります
- 15. メンバー関数を使用して初期化リストのメンバー変数を初期化できますか?
- 16. 関数を返す関数型を記述できますか?
- 17. 入力データの初期化
- 18. TensorFlowでは、初期化されていない変数を初期化する方法はありますか? TensorFlowで変数を初期化する
- 19. 入力が不明確なPHPを受信しようとしています
- 20. 派生クラスから来ない変数で基底クラスを初期化する
- 21. なぜ初期化されていない変数が奇妙な負の値を出力しますか?
- 22. クラス内からFysomを初期化する前に状態コールバック関数が呼び出されています
- 23. PHPコンストラクタなしでクラス変数を初期化する
- 24. call_once関数を初期化する
- 25. javascriptで関数を初期化する
- 26. 初期化されていないローカル変数が実際に初期化されていますか?
- 27. 初期化後のNSMutableArrayが不明です
- 28. ドライバが既に初期化されているクラスを拡張している場合、Pagefactory.initElementsを使用してドライバを初期化していますか?
- 29. 関数ポインタからメンバ関数を初期化する
- 30. 複数の初期化ステップを「不良フォーム」と見なしますか?
任意のコード例をして達成しようとしますか? – Marcin
通常は '* args'を使用します。チュートリアルの[任意の引数リスト](https://docs.python.org/3/tutorial/controlflow.html#arbitrary-argument-lists)を参照してください。いくつかのサンプルコードを見ることなく、より具体的にするのは難しいです。 –