除了使用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'> """