如何使用多重继承覆盖 `__new__`?
How do I override `__new__` with multiple inheritance?
我如何写一个默认的 __new__
并做一些像这样的小改动:
class A:
def __new__(cls, *args, **kwargs):
retval = super().__new__(cls, *args, **kwargs)
retval.tree_parent = None
return retval
class B(A):
def __init__(self, x):
self.x = x
b = B(1)
由于多态链中的其他 classes,我收到不在此 class 控制中的参数传递错误:
TypeError: object() takes no parameters
默认的__new__
可以像在traitlets
模块中那样写:
def __new__(cls, *args, **kwargs):
# This is needed because object.__new__ only accepts
# the cls argument.
new_meth = super(HasDescriptors, cls).__new__
if new_meth is object.__new__:
inst = new_meth(cls)
else:
inst = new_meth(cls, *args, **kwargs)
# Do something with inst.
return inst
我如何写一个默认的 __new__
并做一些像这样的小改动:
class A:
def __new__(cls, *args, **kwargs):
retval = super().__new__(cls, *args, **kwargs)
retval.tree_parent = None
return retval
class B(A):
def __init__(self, x):
self.x = x
b = B(1)
由于多态链中的其他 classes,我收到不在此 class 控制中的参数传递错误:
TypeError: object() takes no parameters
默认的__new__
可以像在traitlets
模块中那样写:
def __new__(cls, *args, **kwargs):
# This is needed because object.__new__ only accepts
# the cls argument.
new_meth = super(HasDescriptors, cls).__new__
if new_meth is object.__new__:
inst = new_meth(cls)
else:
inst = new_meth(cls, *args, **kwargs)
# Do something with inst.
return inst