调用父类时,子类是在另一个模块

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了调用父类时,子类是在另一个模块相关的知识,希望对你有一定的参考价值。

我试图找出如何有一个子类存在于另一个模块。目前,它是更方便我在不同的模块父子类存储由于其大小。我需要超级方法,因为我希望继承不只是所有的功能,但在自变量为好。我目前的解决方案如下:

父模块(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

我明白,这是由于模块重装,从而导致数据丢失,但我不知道是否有一种变通方法。

答案

首先,在你的代码:

  • 这是没有必要总是调用父类的构造函数,特别是呼叫object的构造函数,你在做parent.A不需要
  • 在Python 3,你可以使用更简单super().__init__形式呼叫单继承
  • 进口通常应该是相对的:from .parent import A

现在,您的实际问题:

当您重装parent在这种情况下,你基本上是生成A一个新的类对象,它是不完全相同的已编译B都知道的一个。您可以通过比较id(B.__base__)重装后id(A)检查。这是不是为super()形式的问题,因为不使用名称A明确(它指向新类),而是用实际的基类。因此,它会构造正常,但与“老” A实施。

P.S:重要的是你的问题包括:(这就是为什么它是如此繁琐的做)什么,你实际上是试图做的,在这种情况下重新加载一个模块,这是不是在Python“标准”操作的信息。

以上是关于调用父类时,子类是在另一个模块的主要内容,如果未能解决你的问题,请参考以下文章

java中,引用另一个包中的类做父类时,显示程序包不存在怎么办

JAVA:子类继承父类时的构造方法

子类继承父类时,子类与父类有同名变量,当使用子类对象调用父类方法使用同名变量,这个变量是子类的,还是父类的? (改)

java中子类继承父类时是否继承构造函数

子类-父类构造方法调用问题

如何在java中调用另一个类中子类里的一个变量?