投稿日
2010/12/17 金曜日
当たり前の事かもしれないけど、デコレータってクラスに対しても使えるのではないかとふと思い試してみたところ、普通に出来た。
最近デコレータについてググる事が多いけど、クラスを返すデコレータの例までぐらいはたまに見るけど、クラスに適用するデコレータの例は見たことが無かったような気が。
def viewable(c):
''''viewメソッドを追加するデコレータ'''
def view(self):
print 'view'
if not hasattr(c, 'view'):
c.view = view
return c
@viewable
class C(object):
def test(self):
print 'test'
c = C()
c.test() # testと表示される
c.view() # viewと表示される
しかし見た目はかっこいいけど、静的にメソッドを追加したいなら普通に書くなり、継承するなりすべきだろうからこの例だと使い道はあまりなさそう。
メソッドの前後でログを取るようなデコレータを内包して、それをクラスの全メソッドに適用するようなデコレータにすると多少有用かな。
デコレータってそもそも func = deco(func) のシンタックスシュガーだから、その形で出来ることならなんでも出来る反面、じゃあデコレータ使わずに元の代入文で表現した方が分かりやすくね?って場合もありアレです。
最近のコメント
たかたむ
はじめまして。初リアルフォース(R3ですが)で,同…
nokiyameego
ZFS poolのデバイスラベル破損で悩んていたと…
名前
しゅごい
Jane Doe
FYI Avoid Annoying Unexpe…
Jane Doe
ご存じとは思いますが、whileには、”~の間”と…
花粉症対策2019 – 日曜研究室
[…] 花粉症対策についてはこれまで次の記事を書いてきました。https://…
花粉症対策2019 – 日曜研究室
[…] 花粉症対策についてはこれまで次の記事を書いてきました。https://…
花粉症対策2019 – 日曜研究室
[…] 花粉症対策についてはこれまで次の記事を書いてきました。https://…
花粉症対策2019 – 日曜研究室
[…] 花粉症対策についてはこれまで次の記事を書いてきました。https://…
花粉症対策2019 – 日曜研究室
[…] 花粉症対策についてはこれまで次の記事を書いてきました。https://…