2024-09-30 16:28:06 发布
网友
这是一个老式的课程:
class OldStyle: pass
这是一个新型的类:
class NewStyle(object): pass
这也是一个新型的类:
class NewStyle2: __metaclass__ = type
NewStyle和NewStyle2之间有什么区别吗?你知道吗
NewStyle
NewStyle2
我的印象是,从object继承的唯一效果实际上是定义type元类,但是我找不到对此的任何确认,除了我看不到任何区别之外。你知道吗
object
type
几乎是的,NewStyle和NewStyle2之间没有区别。两者都属于type型,而OldStyle属于classobj型。你知道吗
OldStyle
classobj
如果您从对象生成子类,则使用^{} of ^{} (meaning ^{}) is going;如果您提供^{} that is going to get picked up。你知道吗
如果没有任何内容作为__metaclass__提供,并且您没有从object继承,^{} is assigned as the metaclass为您提供。你知道吗
__metaclass__
在所有情况下,metaclass.__new__都会被调用。对于Py_ClassType.__new__,它遵循在类的基中定义的语义(实际上,我从未检查过它们)和^{} it makes sure to pack ^{}。你知道吗
metaclass.__new__
Py_ClassType.__new__
当然,类似的效果可以通过以下方式实现:
cls = type("NewStyle3", (), {})
直接打电话给type;这只是一个更大的麻烦:-)
几乎是的,
NewStyle
和NewStyle2
之间没有区别。两者都属于type
型,而OldStyle
属于classobj
型。你知道吗如果您从对象生成子类,则使用^{} of ^{} (meaning ^{}) is going ;如果您提供^{} that is going to get picked up 。你知道吗
如果没有任何内容作为} is assigned as the metaclass 为您提供。你知道吗
__metaclass__
提供,并且您没有从object
继承,^{在所有情况下,} it makes sure to pack ^{} 。你知道吗
metaclass.__new__
都会被调用。对于Py_ClassType.__new__
,它遵循在类的基中定义的语义(实际上,我从未检查过它们)和^{当然,类似的效果可以通过以下方式实现:
直接打电话给
type
;这只是一个更大的麻烦:-)相关问题 更多 >
编程相关推荐