我试图弄清楚如何让子类驻留在另一个模块中。目前,由于它们的大小,将父类和子类存储在不同的模块中对我来说更方便。我需要超级方法,因为我不仅要继承所有函数,而且还要继承自变量。我当前的解决方案如下:
父模块(parent.py):
class A:
def __init__(self, *args, **kwargs):
super(A, self).__init__(*args, **kwargs)
子模块(child.py):
from parent import A
class B(A):
def __init__(self, *args, **kwargs):
super(B, self).__init__(*args, **kwargs)
B()
运行子模块时,出现以下错误。
TypeError: super(type, obj): obj must be an instance or subtype of type
我知道这是由于模块重新加载而导致数据丢失,但是我不确定是否有解决方法。
答案 0 :(得分:3)
首先,在您的代码上:
object
中那样调用parent.A
的构造函数super().__init__
形式进行单继承的调用from .parent import A
现在,解决您的实际问题:
在这种情况下,当您重新加载parent
时,实际上将为A
生成一个新的类对象,该对象与编译的B
所知道的对象不同。您可以通过在重新加载后将id(B.__base__)
与id(A)
进行比较来进行检查。对于super()
表单来说,这不是问题,因为它没有显式使用名称A
(指向新类),而是使用实际的基类。因此,它可以很好地构建,但是使用“旧的” A
实现。
P.S .: 重要的是,您的问题必须包含有关您实际要执行的操作的信息,在这种情况下,请重新加载模块,这不是Python中的“标准”操作(这就是为什么这样做很麻烦)的原因。