type类
- type是一个元类(metaclass),用于创建和管理类。
- 任何class在内存中都是一个type类的实例对象。
- Python使用type类来创建其他class。
- type(class_name, parents, class_dict)
- class_name: 新创建的类的名称
- parents: 新创建的类的父类元组
- class_dict: 新创建的类的属性字典
- type(class_name, parents, class_dict)
- 理论上可以用type动态创建class。
1
2
3
4
5
class MyClass:
pass
print(type(MyClass)) # 输出:<class 'type'>
print(isinstance(MyClass, type)) # 输出:True
动态创建Class,并设置成员方法:
metaclass
- 一个metaclass就是一个用来创建其他class的类
- type就是所有class默认的metaclass
- 可以在定义class的时候制定metaclass
- 例如:
1 2
class MyClass(object, metaclass=type): pass
- 例如:
自定义metaclass
实际上是继承type类,重写__new__方法,来做一些修改。metaclass创建类的时候会执行__new__方法。
在这个例子中,创建了一个名为Human的metaclass,继承自type类,重写了__new__方法,来创建Human类的实例对象,我们在__new__方法中,给类添加了一个名为freedom的布尔属性,如果我们使用这个metaclass去构建不同的类,他们都会带有一个freedom的类属性。
- __new__方法的参数:
- mcs: 就是自己这个metaclass
- *args: 位置参数
- classname: 新创建的类的名称
- parents: 新创建的类的父类元组
- class_dict: 新创建的类的属性字典



