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