ついC++のオーバーロードの習慣で、メッソや関数を多重に定義してしまうと、
pythonの場合は単に上書きされてしまうので、思った動作をしてくれない。
ある程度ソフトの規模が大きくなった後に
「オーバーロードした」と思い込んで修正を加えて、
しかも、しばらくしてから動作がおかしい事に気付いたりすると、
なかなか原因が解らなくて時間をとられてしまう。
というか、何度もやってしまった。
pythonのFAQ:
Python では、一つのコンストラクタでデフォルトの引数を使ってすべての場合に対応するように書かなければなりません。例えば:
class C:
def __init__(self, i=None):
if i is None:
print “No arguments”
else:
print “Argument is”, iこれで完全に等価とは言えませんが、実用上は十分に近いです。
長さが変えられる引数のリストを試すには、例えば:
def __init__(self, *args):
…
これと同じやり方がすべてのメソッド定義で使えます。
引数の数が違う場合には、こういう手もあるけど、引数の型違いで区別したい場合…
そもそも python には変数型の概念があまりないのが良いところなのだけど。
仕方がないので、自分のコードで型判定を行なう必要がある。
1 2 |
if isinstance(object, ClassName): ... |
とか。
う〜ん。カッコ悪い