Python: override __init__ args in __new__

object, python

Solution

The solution I went with in the end was to modify the newly created object in the `__new__` and remove the `__init__` method altogether:

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

Problem

I have a `__new__` method as follows: ``` 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): ... ``` However, this fails with a deprecation warning: ``` DeprecationWarning: object.__new__() takes no parameters ``` `SomeOtherClass` can optionally get created as the args are processed, that's why they are being processed in `__new__` and not in `__init__` What is the best way to pass `new_args` to `__init__`? Otherwise, I'll have to duplicate the processing of args in `__init__` (without some_check)

Original source