在Python中,如何避免在派生自其__new__中具有super()的类的类中两次调用__init__:
作者:互联网
我是python的新手.不知何故
__init__
对于使用其他类派生的类,该类被两次调用
super()
我的问题是如何避免这种情况,因为那里的计算非常昂贵.
class A(object):
def __new__(cls, *args, **kwargs):
print("Class A: __new__")
obj = super(A, cls).__new__(cls) # super is used here
obj.__init__(*args, **kwargs)
return obj
def __init__(self, x):
self.attrib = x+1
class B(A):
def __init__(self, x):
print("Class B: __init__")
self.prop = 2*x # some expensive computation
a = A(10) # a test call
b = B(20) # Q: here, how to avoid calling __init__ twice in class B?
编辑:
谢谢你们的回答.我真正的代码是使用scipy库内置的arpack对角一个大型的稀疏矩阵.我正在调用在arpack.py中定义的SpLuInv(LinearOperator)类,其中在interface.py中定义了LinearOperator类,两个文件都被附加:arpack.py和interface.py.当我调用SpLuInv()时,其init被调用两次.从您的答案中,我认为我需要删除LinearOperator()新功能中的obj.init.
感谢Brendan Abel的回答,以及Akshat Mahajan和Mike Graham的评论.拆下
obj.__init__
来自
__new__
的
LinearOperator()
解决了问题.
标签:derived-class,super,python 来源: https://codeday.me/bug/20191027/1941129.html