__metaclass__批量化添加属性
>>> def ma(cls): #注意cls 不然报错。没有ma属性
print 'method a'
>>> def mb(cls): #注意cls 不然报错。没有mb属性
print 'method b'
>>> method_dict = {'ma':ma,'mb':mb}
>>> class Dy(type):
def __new__(cls,name, bases, dct):
if name[:3] == 'Abc':
dct.update(method_dict)
return type.__new__(cls, name, bases, dct)
def __init__(cls, name, bases, dct):
super(Dy,cls).__init__(name,bases,dct)
>>> class AbcTest(object):
__metaclass__ = Dy
def mc(self,x):
print x *3
>>> class NotAbc(object):
__metaclass__ = Dy
def md(self,x):
print x * 3
>>> def main():
a = AbcTest()
a.mc(3) #实例 a 调用 AbcTest 的 mc() #9
a.ma() #因为DY类中增加了 ma,mb 属性,所以可以调用 ma,mb 函数 #method a
print dir(a) #返回实例 a 拥有的属性
b = NotAbc()
print dir(b) #实例 b 没有增加 ma,mb 属性
>>>