type()
函数既可以返回一个对象的类型,又可以创建出新的类型。
def fn(self, name='world'):
print('hello, %s.' % name)
Hello = type('Hello', (object,), dict(hello=fn))
'''
param name: 类的名称
param bases: 类继承的父类集合
param dict: class的方法名称与函数绑定
'''
通过type()
函数创建的类和直接写class是完全一样的,因为Python解释器遇到class定义时,仅仅是扫描一下class定义的语法,然后调用type()
函数创建出class。
metaclass
除了使用type()
动态创建类以外,要控制类的创建行为,还可以使用metaclass。
先定义metaclass,就可以创建类,最后创建实例。
'''
param cls: 当前准备创建的类的对象;
param name: 类的名字;
param bases: 类继承的父类集合;
param attrs: 类的方法集合。
'''
class ListMetaclass(type):
def __new__(cls, name, bases, attrs):
attrs['add'] = lambda self, value: self.append(value)
return type.__new__(cls, name, bases, attrs)
class Mylist(list, metaclass=ListMetaclass):
pass
>>> L = MyList()
>>> L.add(1)
>> L
[1]
网友评论