メタクラス事例分析

メタクラスケース

メタクラスケース

class Mytype(type):
    print("Mytype")
    def __new__(cls, *args, **kwargs):
        print("Mytye_new")
        return type.__new__(cls,*args, **kwargs)
class Model(metaclass=Mytype):
    print("Model")
    def __new__(cls, *args, **kwargs):
        print("Model_new")
    x=1
class zx(Model):
    print("zx")
    def __new__(cls, *args, **kwargs):
        print("zx_new")
z=zx("s","sa")
Mytype
Model
Mytye_new
zx
Mytye_new
zx_new

事例分析

まずビュー、結果はあなたが完全に異なる考えるものではありません、そしてなぜMYTYPE __new__2の実装を?

まず、コードは自己実行ダウンしています

詳細メタクラスに関係なく、最初の書き込みのコード実行順序、

##具体参数不详细填写
##主要分为以下7步骤
1 Mytype=type()
2 Model=Mytype()
3 zx=Mytype()
4 z=zx()

解決するためのステップバイステップの詳細

1 MYTYPE =タイプ()

1.执行Mytype=type(),会首先运行一下类的内容,`print("Mytype")`执行了
2.元类是type,首先调用type as type2元类的`__call__()`
3.type2的`__call__()`会调用type的`__new__()和__call__()`方法
4.成功创建了Mytype对象

印刷情報

Mytype

2モデル= MYTYPE()

1.执行Model=Mytype(),会首先运行一下类的内容,`print("Model")`执行了
2.元类是Mytype,首先调用type元类的`__call__()`
3.type的`__call__()`会调用Mytype的`__new__()和__call__()`方法,`__new__()`里的` print("Mytye_new")`执行了
4.成功创建了Model对象

印刷情報

Model
Mytye_new

3 ZX = MYTYPE()

)、それはZX = MYTYPEを(実行する元のクラスが継承することができ、ZX親がモデルで、モデルのメタクラスがMYTYPEので、ZXメタクラスはMYTYPEであることに留意すべきです

1.执行zx=Mytype(),会首先运行一下类的内容,`print("zx")`执行了
2.元类是Mytype,首先调用type元类的`__call__()`
3.type的`__call__()`会调用Mytype的`__new__()和__call__()`方法,`__new__()`里的` print("Mytye_new")`执行了
4.成功创建了zx对象

印刷情報

zx
Mytye_new

ZX Z = 4()

1.执行zx=Mytype(),会首先运行一下类的内容,`print("zx_new")`执行了
2.元类是zx,首先调用zx元类的type的`__call__()`
3.type的`__call__()`会调用zx的`__new__()和__call__()`方法,`__new__()`里的` print("zx_new")`执行了
4.成功创建了zx对象

印刷情報

zx_new

遂に

そのような具体的な手順、およびその結果を印刷

おすすめ

転載: www.cnblogs.com/zx125/p/11608852.html