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,也会发生同样的情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值