我有一个__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)
我最后使用的解决方案是修改新创建的对象__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)
| 归档时间: |
|
| 查看次数: |
3583 次 |
| 最近记录: |