通过__metaclass__实现自定义列表add方法
1 class ListMetaclass(type): 2 """ 3 通过__metaclass__动态生成类,为新生成的类添加add方法 4 """ 5 6 def __new__(cls, *args, **kwargs): 7 """ 8 :param args: args包含了三个参数具体如下: 9 args[0]: 调用ListMetaclass的类名,这边为"MyList" 10 args[1]: 为MyList所继承的父类,这边为"(<type 'list'>,)" 11 args[2]: 为MyList类所包含的属性与方法, {'__module__': '__main__', '__metaclass__': <class '__main__.ListMetaclass'>} 12 :param kwargs: 13 :return: 返回后必须将这三个参数全部返回 14 """ 15 args[2]["add"] = lambda List, value: List.append(value) 16 return type.__new__(cls, *args) 17 18 class MyList(list): 19 __metaclass__ = ListMetaclass 20 21 c = MyList() 22 c.add(10) 23 print c
打印结果如下: