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

 

posted @ 2021-08-26 16:46  羊脂玉净瓶  阅读(28)  评论(0)    收藏  举报