zvo*_*one 6 python new-style-class python-2.7 python-internals
这是一个旧式的课程:
class OldStyle:
pass
Run Code Online (Sandbox Code Playgroud)
这是一个新式的课程:
class NewStyle(object):
pass
Run Code Online (Sandbox Code Playgroud)
这也是一个新风格的类:
class NewStyle2:
__metaclass__ = type
Run Code Online (Sandbox Code Playgroud)
有没有任何区别之间NewStyle和NewStyle2?
我的印象是继承的唯一影响object实际上是定义type元类,但我找不到任何确认,除此之外我没有看到任何区别.
NewStyle几乎是的,和之间没有区别NewStyle2。两者都是类型typewhileOldStyle类型classobj。
如果您从 object 继承子类,则将使用__class__of object(含义type) ;如果你提供一个__metaclass__将会被拾取的。
如果没有提供任何内容__metaclass__并且您不继承自object,则将被指定为您的Py_ClassType元类。
在所有情况下,metaclass.__new__都会被呼叫。因为Py_ClassType.__new__它遵循定义的语义(我真的从来没有检查过它们),并且type.__new__它确保打包object在你的类的基础中。
当然,类似的效果可以通过以下方式实现:
cls = type("NewStyle3", (), {})
Run Code Online (Sandbox Code Playgroud)
立即致电type;这只是一个更大的麻烦:-)
| 归档时间: |
|
| 查看次数: |
69 次 |
| 最近记录: |