调用父类时,子类是在另一个模块
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中,引用另一个包中的类做父类时,显示程序包不存在怎么办