メモ: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は予約語ではない。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です