from abc import ABC, abstractmethod
class A(ABC):
def __init__(self, name):
self.name = name
@abstractmethod
def something():
pass
class B(A):
pass
我对 OOP 还很陌生,所以我想问这个问题。我知道抽象类被认为是父类(super class),但是抽象类也可以是子类吗?
以代码为例,B
继承自A
,但没有重写A
中的抽象方法,那么这是否意味着B
仍然被视为抽象类以及 A
的子类吗?
最佳答案
首先,什么是抽象类?它是一个用作子类“骨架”的类。 现在回答你的问题......
So does this mean that B is still considered an abstract class as well as as a subclass of A?
是的,因为所有方法都没有被重写,而且它们都是抽象的。
以这段代码为例:
from abc import ABC, abstractmethod
class A(ABC):
@abstractmethod
def foo(self):
pass
@abstractmethod
def bar(self):
pass
class B(A):
def foo(self):
return 'Foo implementation'
这里,类B
仍然是抽象的,因为其中一个抽象方法没有被重写。因此,如果您尝试创建它的实例,您将收到此错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Can't instantiate abstract class B with abstract methods bar
在这里我们可以看到这个类继承自A
,但它是一个具体类,因为方法被重写了:
class C(A):
def foo(self):
pass
def bar(self):
pass
c = C()
c.foo()
此代码运行没有错误。
简而言之,只要方法不被重写,抽象类的子类仍然是抽象类。
关于python - 抽象类可以是子类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69702609/