人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

python下記URL内にあるRubyのalias_method_chainのようなことをしたいと思っています。
http://wota.jp/ac/?date=20060503

少しでもスマートに実現できる方法があれば教えてください。

●質問者: webrecdotjp
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:Python Ruby URL スマート
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● mattn
●35ポイント ベストアンサー

http://mattn.kaoriya.net/

URLはダミーです。

こんなのではダメでしょうか?

class A:
 def dan(self, x):
 return x+1
a = A()

print a.dan(1) # 2
A.__dict__['kogai'] = lambda self,x: x+2
print a.kogai(1) # 3

もちろん lambda でなくても良いですが。

◎質問者からの返答

回答ありがとうございます。

この例でいうと、

print a.dan(1) # 4 => (x+1)+2として解釈

を出すようにしたいです。


2 ● mattn
●35ポイント

こんな感じでしょうか?

class A:
 def dan(self, x):
 return x+1
setattr(A, "old_dan", A.dan)
setattr(A, "dan", lambda self,x: self.old_dan(x)+1)

a = A()
print a.dan(1)
◎質問者からの返答

回答ありがとうございます。

setattrで定義すればいけそうですね。

def alias_method_chain( foo, bar)
 setattr(A, "foo_without_bar", foo)
 setattr(A, "foo_with_bar", lambda self: (self.foo_without_bar, self.bar) )
 setattr(A, "foo", foo_with_bar)

って感じで定義したいですが、これってどうかけば動くんですかね。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ