Python 当子类位于另一个模块中时调用父类
我试图弄清楚如何让子类驻留在另一个模块中。目前,由于父类和子类的大小,我更方便地将它们存储在不同的模块中。我需要超级方法,因为我不仅要继承所有函数,还要继承self中的变量。我目前的解决办法如下: 父模块(Parent.py): 子模块(Child.py): 当我运行子模块时,我得到以下错误Python 当子类位于另一个模块中时调用父类,python,python-3.x,Python,Python 3.x,我试图弄清楚如何让子类驻留在另一个模块中。目前,由于父类和子类的大小,我更方便地将它们存储在不同的模块中。我需要超级方法,因为我不仅要继承所有函数,还要继承self中的变量。我目前的解决办法如下: 父模块(Parent.py): 子模块(Child.py): 当我运行子模块时,我得到以下错误 TypeError: super(type, obj): obj must be an instance or subtype of type 我知道这是由于模块重新加载导致数据丢失,但我不确定是否有解决
TypeError: super(type, obj): obj must be an instance or subtype of type
我知道这是由于模块重新加载导致数据丢失,但我不确定是否有解决办法。首先,关于您的代码:
- 不必总是调用父构造函数,特别是调用
对象的构造函数,就像您在
父类中所做的那样。不需要使用
- 在Python3中,可以使用更简单的
表单来调用单个继承super()。\uuuu init\uuuu
- 导入通常应该是相对的:
from.parent导入A
父对象时,您实际上为a
生成了一个新的类对象,该对象与您编译的B
所知道的对象不同。您可以通过在重新加载后将id(B.\uuu base\uuuu)
与id(A)
进行比较来检查这一点。这对于super()
表单不是问题,因为它没有显式地使用名称a
(它指向新类),而是使用实际的基类。因此,它的构造很好,但是使用了“旧的”A
实现
附言:
您的问题必须包含有关您实际尝试执行的操作的信息,在本例中是重新加载模块,这不是Python中的“标准”操作(这就是为什么这么麻烦的原因)。首先,关于您的代码:
- 不必总是调用父构造函数,特别是调用
对象的构造函数,就像您在父类中所做的那样。不需要使用
- 在Python3中,可以使用更简单的
super()。\uuuu init\uuuu
表单来调用单个继承
- 导入通常应该是相对的:
from.parent导入A
现在,针对您的实际问题:
在这种情况下,当您重新加载父对象时,您实际上为a
生成了一个新的类对象,该对象与您编译的B
所知道的对象不同。您可以通过在重新加载后将id(B.\uuu base\uuuu)
与id(A)
进行比较来检查这一点。这对于super()
表单不是问题,因为它没有显式地使用名称a
(它指向新类),而是使用实际的基类。因此,它的构造很好,但是使用了“旧的”A
实现
附言:
您的问题必须包含关于您实际尝试执行的操作的信息,在本例中是重新加载模块,这在Python中不是一个“标准”操作(这就是为什么这么麻烦的原因)
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