# -*- coding: utf-8 -*-
""" カスタマイズしたメタクラスの例
プロパティへのアクセスをロギングする
"""
class MyTracer(type):
""" メタクラスがクラスを初期化するためのコンストラクタ
"""
def __init__(cls, name, bases, dct):
# 親メタクラスに、クラスを初期化してもらう
super(MyTracer, cls).__init__(name, bases, dct)
# ロギングできる __getattribute__ メソッドを作り、クラスに組み込む
def logging(self, key):
print "%s was accessed." % key
return super(cls, self).__getattribute__(key)
cls.__getattribute__ = logging
""" MyTracer によってクラスを作らせると、
プロパティにアクセスされる度にロギングされる
"""
class TestClass(object):
# メタクラスの指定
__metaclass__ = MyTracer
def hello(self):
self._first_sentence()
self._second_sentence()
def _first_sentence(self):
print "Hi."
def _second_sentence(self):
print "How do you do?"
if __name__ == '__main__':
test = TestClass()
test.hello()
出典
Pythonを始めよう(3/5):CodeZine
投稿者紹介
-
株式会社ユニキャスト
-
私たちは、テクノロジに魅せられた個性あふれるメンバーによって構成された茨城県日立市に本社を構えるベンチャー企業です。
”テクノロジを通して「驚き」と「感動」を創造し、人々の「夢」と「笑顔」を支えます。” の経営理念をモットーに明るい未来を描き、ワクワクする企画提案を続けて参ります。