type()和type.__new__()区别,两个code片段成懂王

83 阅读1分钟

作者帅的人都关注了

GithubGithub

爱好Americano More Ice !

QQ学习交流群(new): 811792998

  • 片段1

1.返回一个名称为name的新type,这个type没有任何东西 2.执行MetaA和MetaA.init__不会有任何效果,不会触发__init

>>> class MetaA(type):
...     def __new__(cls, name, bases, dct):
...         print 'MetaA.__new__'
...         return type(name, bases, dct)
...     def __init__(cls, name, bases, dct):
...         print 'MetaA.__init__'
... 
>>> class A(object):
...     __metaclass__ = MetaA
... 
MetaA.__new__
>>> 
  • 片段2

1.返回一个名称为name的新type,return结果为type,是cls一个实例,实例就是MetaA 2.执行完__new__可以触发__init__

>>> class MetaA(type):
...     def __new__(cls, name, bases, dct):
...         print 'MetaA.__new__'
...         return type.__new__(cls, name, bases, dct)
...     def __init__(cls, name, bases, dct):
...         print 'MetaA.__init__'
... 
>>> class A(object):
...     __metaclass__ = MetaA
... 
MetaA.__new__
MetaA.__init__
>>> 

结束语:如果遇到什么疑问或者建议的,可直接留言评论!作者看到会马上一一回复

如果觉得小白此文章不错或对你有所帮助,期待你的一键三连💫!❤️ ni ~