Python是一门全对象语言,我们知道对象的实例化需要有类的存在,既然是全对象,所以类本身也是对象,那么他们的实例化是从哪个类而来的呢?这里就需要python本身有个最底层的基类,也就是是本文要讲解的元类(type)来帮我们解决这个问题了,下面我们来详细演示一下type元类的查找和使用。
一、元类的查找
num = 10
name = 'xxx'
list1 = [1, 2, 3]
class Cat:
pass
c = Cat()
上面是四种不同的数据类型,也是对象。下面通过__class__来查找这四种数据类型的元类。
print(num.__class__.__class__)
print(name.__class__.__class__)
print(list1.__class__.__class__)
print(c.__class__.__class__)
返回结果:
<class 'type'>
<class 'type'>
<class 'type'>
<class 'type'>
从上面的结果可以看出来返回的结果都是type类,这也就是所有数据类型和类的最底层基类——元类。
二、使用元类创建子类
既然type是元类,那么使用他一定能创建子类了,同时也能实例化出对象,下面我们来演示一下。
def run(self):
pass
aa = type('Cat', (), {'name': 'jerry', 'run': run})
# 'Cat'是类名;()元祖中是父类; {'name': 'jerry', 'run': run}是存储属性和方法的字典,使用__dict__访问
# 实例化一个对象
d = aa()
print(d.__dict__)
print(d.run())