抽象类是一种不能直接被继承的类。举个例子,我们可以从类Creature
衍生出类People
,Cats
,其中前者两条腿走路,后者四条腿走路,而单独的类Creature
却没有一个几条腿走路的方法,因为这是不确定的。
(关于装饰器,可查看https://blog.csdn.net/qq_45812220/article/details/137809943
)
我们直接上代码:
dart
import abc
class A(metaclass=abc.ABCMeta):
@abc.abstractmethod
def mine(self):
class B(A):
def mine(self):
print("123")
b = B()
定义抽象类需要使用abc
库,这里我们装饰了实例方法mine
,实际上也可以装饰其他东西,读者可自己完成。
执行无输出,程序结束。我们成功定义了一个含有抽象方法mine
的抽象类A
,并由B
继承它,完成了B
的实例化
但如果我们执行下面的代码:
dart
import abc
class A(metaclass=abc.ABCMeta):
@abc.abstractmethod
def mine(self):
pass
class B(A):
pass
b = B()
程序会报错:
dart
TypeError: Can't instantiate abstract class B with abstract method mine
也就是说,由于B
继承自抽象类A
,B
必须实现A
中的所有抽象方法,我们才能顺利将B
实例化。