从对象定义子类与将类型定义为元类相同吗?

2024-09-30 16:28:06 发布

您现在位置:Python中文网/ 问答频道 /正文

这是一个老式的课程:

class OldStyle:
    pass

这是一个新型的类:

class NewStyle(object):
    pass

这也是一个新型的类:

class NewStyle2:
    __metaclass__ = type

NewStyleNewStyle2之间有什么区别吗?你知道吗

我的印象是,从object继承的唯一效果实际上是定义type元类,但是我找不到对此的任何确认,除了我看不到任何区别之外。你知道吗


Tags: 定义objecttypepass老式classmetaclass课程
1条回答
网友
1楼 · 发布于 2024-09-30 16:28:06

几乎是的,NewStyleNewStyle2之间没有区别。两者都属于type型,而OldStyle属于classobj型。你知道吗

如果您从对象生成子类,则使用^{} of ^{} (meaning ^{}) is going;如果您提供^{} that is going to get picked up。你知道吗

如果没有任何内容作为__metaclass__提供,并且您没有从object继承,^{} is assigned as the metaclass为您提供。你知道吗

在所有情况下,metaclass.__new__都会被调用。对于Py_ClassType.__new__,它遵循在类的基中定义的语义(实际上,我从未检查过它们)和^{} it makes sure to pack ^{}。你知道吗

当然,类似的效果可以通过以下方式实现:

cls = type("NewStyle3", (), {})

直接打电话给type;这只是一个更大的麻烦:-)

相关问题 更多 >