gpt4 book ai didi

Python:覆盖 __new__ 中的 __init__ args

转载 作者:太空宇宙 更新时间:2023-11-03 12:42:52 24 4
gpt4 key购买 nike

我有一个 __new__ 方法如下:

class MyClass(object):
def __new__(cls, *args):
new_args = []
args.sort()
prev = args.pop(0)
while args:
next = args.pop(0)
if prev.compare(next):
prev = prev.combine(next)
else:
new_args.append(prev)
prev = next
if some_check(prev):
return SomeOtherClass()
new_args.append(prev)
return super(MyClass, cls).__new__(cls, new_args)

def __init__(self, *args):
...

但是,这会失败并显示弃用警告:

DeprecationWarning: object.__new__() takes no parameters

SomeOtherClass 可以选择在处理 args 时创建,这就是为什么它们在 __new__ 而不是在 __init__ 中处理的原因

new_args 传递给 __init__ 的最佳方式是什么?

否则,我将不得不在 __init__ 中重复对 args 的处理(没有 some_check)

最佳答案

我最后采用的解决方案是修改 __new__ 中新创建的对象并完全删除 __init__ 方法:

def __new__(cls, *args):
... # as above
new_self = super(MyClass, cls).__new__(cls)
new_self.args = new_args
return new_self

#def __init__(self, *args):
# self.args = args

关于Python:覆盖 __new__ 中的 __init__ args,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2468112/

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