class _MyMetaclass(type):
def __init__(cls, name, bases, dct):
print '_MyMetaclass::__init__'
class MyClass(object):
__metaclass__ = _MyMetaclass
def __init__(self):
print 'MyClass::__init__'
これを実行すると
'_MyMetaclass::__init__
と表示される。MyClassのinstanceは生成していないのでMyClass::__init__は表示されない。
MyClass自体は生成され、その過程で前出の表示が行われる。このfileをimportしても表示される。(ファイルを読んで評価したタイミングというべきかな?)
で、前のentryのTemplateがmetaclassでは、正規表現のcompileが行われているので、
xxx = re.compile(yyy)
としているようなファイルをimportするのと同じタイミングで正規表現がCompileされる。dctの中身にpatternがあるかどうかチェックしているので一回しかcompileされない。この点に関しては同じ事はinstance/classレベルでも可能。
0 件のコメント:
コメントを投稿