metaclass--元类
除了使用type()动态创建类以外,要控制类的创建行为,还可以使用metaclass。 metaclass,直译为元类,简单的解释就是:
当我们定义了类以后,就可以根据这个类创建出实例,所以:先定义类,然后创建实例。
但是如果我们想创建出类呢?那就必须根据metaclass创建出类,所以:先定义metaclass,然后创建类。
连接起来就是:先定义metaclass,就可以创建类,最后创建实例。
所以,metaclass允许你创建类或者修改类。换句话说,你可以把类看成是metaclass创建出>来的“实例”。
元类特性
一、下面代码展示了元类可以创建类.以及元类的常用写法:
class Hello: passclass Base(type): def __new__(cls, name, bases, attrs): print(f"cls:{cls}") print(f"name:{name},type:{type(name)}") print(f"bases:{bases},type:{type(bases)}") print(f"attrs:{attrs},type:{type(attrs)}") print("=" * 50) return type.__new__(cls, name, bases, attrs)class World(metaclass=Base): passclass User(World): def say(self): passprint("-" * 50)print(f"Hello-type:{type(Hello)}")print(f"World-type:{type(World)}")"""cls:name:World,type: bases:(),type: attrs:{'__module__': '__main__', '__qualname__': 'World'},type: ==================================================cls: name:User,type: bases:( ,),type: attrs:{'__module__': '__main__', '__qualname__': 'User', 'say': },type: ==================================================--------------------------------------------------Hello-type: World-type: """