元类:元类是类的类,是类的模板,是用来控制如何创建类的。元类的实例是类,正如类的实例是对象。
元类介绍
#两种创建类的方法
#方法1:class 创建
class Foo:
pass
print(Foo.__dict__)
def __init__(self,name,age):
self.name = name
self.age = age
def test(self):
print('===>')
#方法2:type 创建
FFo = type('FFo',(object,),{'x':1,'__init__':__init__,'test':test})
print(FFo)
print(FFo.__dict__)
f1 = FFo('aaa','12')
print(f1.__dict__)
自定义元类
#type是元类,现在我们自定义元类
class MyType(type): #首先要继承 type 类
def __init__(self,a,b,c):
print('元类的构造函数执行')
# print(a)
# print(b)
# print(c)
def __call__(self,*args,**kwargs):
# print('===>')
# print(self)
# print(args,kwargs)
obj = object.__new__(self) #
self.__init__(obj,*args,**kwargs) #Foo.__init__(f1,*args,**kwargs)
return obj
class Foo(metaclass=MyType): #Foo=MyType(Foo,'Foo',(),{})--->__init__
def __init__(self,name):
self.name = name
f1 = Foo('aaa') #类加(),调用__call__方法
print(f1.__dict__)