有時,我們抽象出一個基類,知道要有哪些方法,但只是抽象方法,並不實現功能,只能繼承,
而不能被實例化,但子類必須要實現該方法。看下面的例子:
import abc
class Foo(abc.ABC):
@abc.abstractmethod
def fun(self):
pass
a = Foo()
# 實例化報錯
# TypeError: Can't instantiate abstract class Foo with abstract methods fun
下面子類繼承該方法
class Sub_foo(Foo):
def f(self):
print('This is sub foo!')
c = Sub_foo()
# 子類並沒有實現fun 方法,實例化子類sub_foo同樣報錯
# TypeError: Can't instantiate abstract class Sub_foo with abstract methods fun
我們在子類實現fun方法:
class Sub_foo(Foo):
def fun(self):
print("From sub_foo")
def f(self):
print('This is sub foo!')
c = Sub_foo()
c.fun()
c.f()
輸出:
From sub_foo This is sub foo!
但是注意,如果這時你實例化Foo,仍然是報錯的,因為抽象基類只能繼承而不能實例化,子類要實例化
必須先實現該方法。
為了理解抽象基類,你可以這樣想,我們有水果這個抽象基類,有蘋果,香蕉,桃子類等,但你永遠只能
吃得到蘋果,桃子這些,而不能吃到所謂的“水果”。
