Python面向对象编程:抽象类能否作为子类存在?
抽象类继承相关问题解答
抽象类是否可以作为子类存在?
完全可以。抽象类的核心判定标准是类中是否存在未实现的抽象方法,和它是否继承自其他类没有关系。只要它继承了某个父类,同时自身还有未实现的抽象方法,它就既是父类的子类,同时也是抽象类。
示例代码中B类的属性判定
你给出的示例代码如下:
from abc import ABC, abstractmethod class A(ABC): def __init__(self, name): self.name = name @abstractmethod def something(): pass class B(A): pass
针对B类的两个疑问的答案如下:
- B 是 A的子类:只要类定义时指定了继承关系,该关系就成立,你可以通过
issubclass(B, A)进行验证,运行后会返回True。 - B 是 抽象类:因为B继承了A中的抽象方法
something,但没有对该方法进行重写实现,只要类中存在未实现的抽象方法,就属于抽象类,无法直接实例化。如果尝试执行B("测试")创建实例,Python会直接抛出TypeError异常。
你可以对B类做扩展验证,比如给B新增一个抽象方法,只要所有抽象方法没有被全部实现,后续继承B的子类只要没有重写全所有抽象方法,就依然是抽象类。
内容的提问来源于stack exchange,提问作者abc
相关产品推荐
相关产品推荐

