普段 Julia を書いているのですが、Python でどう管理すればよいのか分からないことがあります。
クラスによって異なる実装になるかもしれないのですが、同じ意味の値を返す関数をいろんな既存のモジュールのクラスについて定義したいのですが、やり方がよく分かりません。自作のモジュールなら、そのモジュールをいじって、該当クラスのメソッドを追加すれば良いだけですが、既存のモジュールにその関数を別名を付けないで実装するにはどうすれば良いのでしょうか?Python では、同じ名前を付けたい場合は、関数の引数の型に関するオーバーロードはないので、多くの場合、クラスのメソッドとしてその機能を提供すると思うのですが、既存のクラスをいじりたい場合はどうすれば良いのでしょうか?
現在はとりあえず、型ごとに別名を関数のお尻に付けて対処していますが、段々増えてきて煩雑になってきてしまったのでどうにかしたいです。
例えば、現在、
python
1import modulea 2import moduleb 3 4def func1_a(a1: modulea.TypeA, a2: modulea.TypeA) -> modulea.TypeA: 5 a = a1 + a2 6 return a 7def func1_b(b1: moduleb.TypeB, b2: moduleb.TypeB) -> moduleb.TypeB: 8 b = b1 + b2 9 return b 10def func2_a(a1: modulea.TypeA, a2: modulea.TypeA) -> modulea.TypeA: 11 a = a1 - a2 12 return a 13def func2_b(b: moduleb.TypeB, b2: moduleb.TypeB) -> moduleb.TypeB: 14 b = b1 - b2 15 return b 16 17# 関数を使うとき 18 19func1_a(a1, a2) 20func1_b(b1, b2) 21func2_a(a1, a2) 22func2_b(b1, b2)
こんな感じになっているのを
python
1func1(a1, a2) 2func1(b1, b2) 3func2(a1, a2) 4func2(b1, b2)
または
python
1a1.func1(a2) 2b1.func1(b2) 3a1.func2(a2) 4b1.func2(b2)
として管理したいということです。
意味がよくわかりません。どういうことでしょうか?
ざっくりとで良いので、サンプルを書いてくれませんか? そうしないと質問者さんの意図と違う解釈で回答が付く可能性が高いです。
ジェネリクス的なことですか?
Java のジェネリクスにはあまり詳しくないのですが、そういうような、多態性を実現して管理したいということです。
func1_aとfunc1_bが分かれている方が管理/保守しやすいという考えは理解しますが、最後に欲しいのがfunc1なら、最初からfunc1だけを書いて管理/保守した方がまだマシなのでは? としか思わないんですか……。
「何が問題なのか」「何を解決したいのか」がぼんやりしています。多分提示されたコードに意味がなくて、意味論の方から考えられないせいだろうと思いますが。
最初から func1 だけを書いて実装する方法というのが分かりません。ここで func1_a と func1_b というのは一般的に異なる型を受け取り、異なる処理をする関数です。
回答2件
あなたの回答
tips
プレビュー