gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 21:37:52 25 4
gpt4 key购买 nike

我总是像这样设置元类:

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__。我已经了解了他们在另一个类(class)中的区别。但是在元类中,我不能使用 __new__ 来实现缓存,因为 __new__ 仅在元类中创建类时调用。

最佳答案

如果你想在创建类之前改变属性dict,或者改 rebase 础元组,你必须使用__new__。当 __init__ 看到参数时,类对象已经存在。此外,如果您想要返回的不是新创建的相关类型的类,则必须使用 __new__

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

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

关于python - 定义元类时是否有任何理由选择 __new__ 而不是 __init__ ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1840421/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com