除了使用type()动态建立类之外,要控制类的建立行为,还能够使用metaclass。 metaclass,直译为元类,简单的解释就是:python
当咱们定义了类之后,就能够根据这个类建立出实例,因此:先定义类,而后建立实例。code
可是若是咱们想建立出类呢?那就必须根据metaclass建立出类,因此:先定义metaclass,而后建立类。io
链接起来就是:先定义metaclass,就能够建立类,最后建立实例。function
因此,metaclass容许你建立类或者修改类。换句话说,你能够把类当作是metaclass建立出>来的“实例”。class
class Hello: pass class 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): pass class User(World): def say(self): pass print("-" * 50) print(f"Hello-type:{type(Hello)}") print(f"World-type:{type(World)}") """ cls:<class '__main__.Base'> name:World,type:<class 'str'> bases:(),type:<class 'tuple'> attrs:{'__module__': '__main__', '__qualname__': 'World'},type:<class 'dict'> ================================================== cls:<class '__main__.Base'> name:User,type:<class 'str'> bases:(<class '__main__.World'>,),type:<class 'tuple'> attrs:{'__module__': '__main__', '__qualname__': 'User', 'say': <function User.say at 0x1091d4378>},type:<class 'dict'> ================================================== -------------------------------------------------- Hello-type:<class 'type'> World-type:<class '__main__.Base'> """