Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当子类位于另一个模块中时调用父类_Python_Python 3.x - Fatal编程技术网

Python 当子类位于另一个模块中时调用父类

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 我知道这是由于模块重新加载导致数据丢失,但我不确定是否有解决

我试图弄清楚如何让子类驻留在另一个模块中。目前,由于父类和子类的大小,我更方便地将它们存储在不同的模块中。我需要超级方法,因为我不仅要继承所有函数,还要继承self中的变量。我目前的解决办法如下:

父模块(Parent.py):

子模块(Child.py):

当我运行子模块时,我得到以下错误

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