使用type创建类
type还有一种功能,动态创建类
type(类名,由父类名称组成的元组(针对继承的情况,可以为空),包含属性的字典(名称和值))
class Test1: pass Test2 = type("Test2",(),{}) t1 = Test1() t2 = Test2() print(type(t1)) print(type(t2))
输出
<class '__main__.Test1'> <class '__main__.Test2'>
class是type创建的
type是元类
metaclass
除了使用type()
动态创建类以外,要控制类的创建行为,还可以使用metaclass。
metaclass,直译为元类,简单的解释就是:
当我们定义了类以后,就可以根据这个类创建出实例,所以:先定义类,然后创建实例。
Python做了如下的操作:
1. Foo中有__metaclass__这个属性吗?如果是,Python会通过 __metaclass__创建⼀个名字为Foo的类(对象)
2. 如果Python没有找到__metaclass__,它会继续在Bar(⽗类)中寻找 __metaclass__属性,并尝试做和前⾯同样的操作。
3. 如果Python在任何⽗类中都找不到__metaclass__,它就会在模块层次 中去寻找__metaclass__,并尝试做同样的操作。
4. 如果还是找不到__metaclass__,Python就会⽤内置的type来创建这个类 对象。