1.元类介绍
所谓元类,就是产生类的类,元类的实例就是类,对元类进行实例化,也就产生了元类
class Foo: pass print(type(Foo)) == <class 'type'>#是由类type产生
2.声明自己的元类
class Deco: def __init__(self,a,b,c):#元类必须有四个参数 pass class Foo(metaclass=Deco): pass print(type(Foo)) === <class '__main__.Deco'>#是由deco产生的实例
3. 自定义元类
自定义的元类,inint会有四个参数,在进行实例化(产生类)的时候,加上括号就调用了call函数,利用call方法来实现实例化,
class Func(type):#为什么要说明这个类是继承于type的呢? #这样的话就是自定制,而不是自定义,只是对某种功能进行了改写 def __init__(self, name, father, dict): pass # self.name=name#此时的self是Test这个类 # self.father=father # self.dict=dict def __call__(self, *args, **kwargs): obj = object.__new__(self) # 由self也就是Test生成一个新的对象,最后肯定是return obj # 生成了之后,肯定是要对obj做什么事情,给obj赋值 self.__init__(obj, *args, **kwargs) # 由self也就是test类来生成一个实例 return obj class Test(metaclass=Func): def __init__(self, name): self.name = name # Test规定了metaclass,这样test就是由func实例化而来,在Test()的时候,会调用类的call方法,也就是Func的call方法 # 目的:通过call方法,来完成Test的一个实例 p1 = Test('alex') # 分析 # Test(‘alex’),首先调用call方法,需要生成一个新的对象,来赋给p1 print(p1.__dict__)