У меня есть метод __new__
следующим образом:Python: переопределить __init__ арг в __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
может дополнительно получить создан как арг являются обработаны, поэтому они обрабатываются в __new__
, а не в __init__
Каков наилучший способ пройти new_args
до __init__
?
В противном случае мне придется дублировать обработку аргументов в __init__
(без some_check)
В моем случае это дизайн, как MyClass и SomeOtherClass кооперативные типы, и могут обрабатываться взаимозаменяемо (общий интерфейс). – EoghanM