python元类metaclass
# 定义类 class Foo(): def __init__(self,name): self.name = name def __new__(cls, *args, **kwargs): data = object.__new__(cls) return data # 根据类创建对象步骤 1. 执行类的new方法,创建对象(空对象) 2. 执行类的init方法,初始化对象 p = Foo("zhangsan") print(p.name)
问题:对象是基于类创建的,那类是基于什么创建的?
类默认是由type创建的,怎么让一个类的创建改成其它呢?这里引入了元类。
元类,指定类由谁创建
# type创建Foo类 class Foo(object): pass
# 由test创建类 class F(object,metaclass="test"): psss
# 但是一般不这么写,通常自己定义一个type,然后在创建类的时候引入这个type即可
class MyType(type):
psss
class Foo(object,metaclass=MyType):
psss
此时,Foo类就由MyType创建
class MyType(type): def __init__(self,*args,**kwargs): super().__init__(*args,**kwargs) # 创建类 def __new__(cls, *args, **kwargs): new_cls = super().__new__(cls,*args,**kwargs) return new_cls # 创建Foo类 class Foo(object,metaclass=MyType): pass