元类

一.定义
我们知道类进行实例化之后会产生一个实例,也就是说实例是由类产生的。但是由于在python中一切皆对象,那么类又是由什么产生的呢?
在python中我们定义:
元类是类的类,它是产生类的模板;
元类(metaclass)的实例是类,type是python的一个内建元类,用来直接控制生成的类,python中任何一个class定义的类都是由type类实例化产生的对象。不要问我,type类是由哪个类产生的.......
二.定义类的两种方式
方式1:使用class关键字定义
元类
方式2:使用type元类来定义
元类
该部分代码块如下:
#类的定义方式一,使用class关键字

class School:
    def __init__(self,name,addr):
        self.name = name
        self.addr = addr

    def showinfo(self):
        print("%s学校在%s"%(self.name,self.addr))
# print(School.__name__)
# print(School.__dict__)

#类的定义方式二,使用type元类定义
def __init__(self,name,addr):
    self.name = name
    self.addr = addr
def showinfo(self):
    print("%s学校在%s"%(self.name,self.addr))
    #type函数三个参数,第一个参数是类名,字符串格式;第二个参数是它所继承的类,元组形式;第三个参数是它的属性字典,字典形式,可以是数据属性也可以是函数属性
TSchool = type('School',(object,),{'__init__':__init__,'showinfo':showinfo,'size':32000})
print(TSchool.__name__)
print(TSchool.__dict__)
tschool = TSchool('浙江大学','浙江省杭州市')      #实例化
print(tschool.size) #查看数据属性size
tschool.showinfo()  #调用类的showinfo方法

三.自定义元类
我们知道所有未经说明的类的元类都是type,所有的类都是继承了type元类。
元类

猜你喜欢

转载自blog.51cto.com/10836356/2113338