定义元类时,是否有任何理由选择__new__而不是__init__?

发布于 2021-01-29 15:09:05

我一直在设置元类,如下所示:

class SomeMetaClass(type):
    def __new__(cls, name, bases, dict):
        #do stuff here

但是我只是遇到了这样定义的元类:

class SomeMetaClass(type):
    def __init__(self, name, bases, dict):
        #do stuff here

有什么理由比另一个更喜欢吗?

更新
:请记住,我在询问有关在类中使用__new____init__的问题。我已经在另一堂课中了解了它们之间的区别。但是在元类中,我不能__new__用来实现缓存,因为__new__仅在元类中创建类时才调用它。

关注者
0
被浏览
83
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    如果要在创建类之前更改属性dict或更改基元组,则必须使用__new__。当__init__看到参数时,该类对象已经存在。另外,__new__如果要返回除所讨论类型的新创建的类以外的其他内容,则必须使用。

    另一方面,在__init__运行时,该类确实存在。因此,您可以执行一些操作,例如将对刚刚创建的类的引用提供给其成员对象之一。

    编辑 :更改了措辞,以使其更清楚地表明“对象”是指类对象。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看