python 中的 metaclass

Posted 0bug

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 中的 metaclass相关的知识,希望对你有一定的参考价值。

最遇到一个问题。

class Meta(type):
    pass

class M1(Meta):
    pass
class M2(metaclass=M1):
    pass

class Test(M2,metaclass=Meta):
    pass

print(type(Test)) # <class ‘__main__.M1‘>

# 说明 没有找自己的metaclass ,而是用了父亲的metaclass

  

class Meta(type):
    pass

class M1(Meta):
    pass
class M2(metaclass=M1):
    pass
class M3(metaclass=Meta):
    pass
class Test(M2,M3,metaclass=Meta):
    pass
    

print(type(Test)) # <class ‘__main__.M1‘>

# 两个父亲都有metaclass的时候,M2的metaclass是M3metaclass的子类
# 用子类不用父类

  

class Meta(type):
    pass


class M1(Meta):
    pass

class M4(M1):
    pass

class M2(metaclass=M4):
    pass


class M3(metaclass=Meta):
    pass




class Test(M2, M3, metaclass=M4):
    pass


print(type(Test))  # <class ‘__main__.M4‘>

  

以上是关于python 中的 metaclass的主要内容,如果未能解决你的问题,请参考以下文章

深刻理解Python中的元类(metaclass)

深刻理解Python中的元类(metaclass)

深刻理解Python中的元类(metaclass)

Python中的metaclass

Python中的元类(metaclass)

Python 3 中的 __metaclass__