メモ:Pythonで代替関数の定義
存在しないメンバを参照しようとするとAttributeError例外が出るので、単にそれを受け取って代替の関数で上書きしちゃえばいい。
try:
get_major=os.major
get_minor=os.major
except AttributeError:
def get_major(x):
return x/0x100
def get_minor(x):
return x%0x100
os.major=get_major
os.minor=get_minor
os.majorとos.minorはPython2.3から入った。2.2ではexceptの中が実行される。中身は、たぶん妥当に動く場合が多いと思うけど、もちろん保証の限りではない。 ここで軽い注意。
def os.major(x):
return x/0x100
と直接書くことはできない(まあ、書かないとは思うけど)。 モジュールの関数の場合はmodule.func()で呼んでも第1引数はselfにならないようだ。クラスの場合はいわゆるC++でもおなじみの暗黙の第1引数ということでobj.func()は第1引数がobj(いわゆるthisとかselfとか呼ばれるモノ)になるのだが。で、classの中にクラスの外で定義したfuncを押し込むときは、引数にselfを書けばいい。 ちなみに(関係ないが)Pythonではselfは予約語ではない。