#!/usr/local/bin/python2 class MyMeta(type): def __call__(self, arg): # selfはメタクラスのインスタンスすなわちメタクラスによって新しく生成されるクラスになる。 print "__call__",arg super(MyMeta,self).__call__() def __new__(cls, name, bases, dict): # clsはメタクラスすなわちクラスメソッド__new__が実装されているクラス(ここではMyMetaクラス)を指す。 print "__new__" return super(MyMeta, cls).__new__(cls, name, bases, dict) def __init__(self, name, bases, dict): print "__init__" super(MyMeta,self).__init__(name, bases, dict) class MyCls(object): __metaclass__=MyMeta def __new__(cls, arg): # clsはここではMyClsクラスを指す。 print "MyCls.__new__" return super(MyCls, cls).__new__(cls) def __init__(self, arg): # selfはクラスのインスタンスを指す。 print "MyCls.__init__",arg