python父类子类_在python中从父类文件调用子类方法

只有当A是抽象基类时,这样做才有意义,这意味着A只是用作其他类的基类,而不是直接实例化。如果是这样的话,您可以在类A上定义methodB,但不让它实现:class A(object):

def methodA(self):

print("in methodA")

def methodB(self):

raise NotImplementedError("Must override methodB")

from parent import A

class B(A):

def methodB(self):

print("am in methodB")

这不是绝对必要的。如果您不在A中的任何位置声明methodB,并实例化B,您仍然可以从methodA的主体调用methodB,但这是一种错误的做法;不清楚methodA应该来自何处,或者子类需要重写它。

如果希望更正式,可以使用Python^{}模块将A声明为抽象基类。from abc import ABCMeta, abstractmethod

class A(object):

__metaclass__ = ABCMeta

def methodA(self):

print("in methodA")

@abstractmethod

def methodB(self):

raise NotImplementedError("Must override methodB")

使用它实际上会阻止您在不重写methodB的情况下实例化A或从A继承的任何类。例如,如果B看起来是这样的:class B(A):

pass

尝试实例化它时会出现错误:Traceback (most recent call last):

File "", line 1, in

TypeError: Can't instantiate abstract class B with abstract methods methodB

如果尝试实例化A,也会发生同样的情况。