Python:在__new__中覆盖__init__ args

Eog*_*anM 3 python object

我有一个__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):
       ...
Run Code Online (Sandbox Code Playgroud)

但是,这会因弃用警告而失败:

DeprecationWarning: object.__new__() takes no parameters
Run Code Online (Sandbox Code Playgroud)

SomeOtherClass作为ARG游戏处理可以选择生成,这就是为什么他们正在处理中__new__,而不是在__init__

传递new_args__init__谁的最佳方式是什么?

否则,我将不得不复制args的处理__init__(没有some_check)

Eog*_*anM 7

我最后使用的解决方案是修改新创建的对象__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
Run Code Online (Sandbox Code Playgroud)