python3 抽象基類 abc.abstractmethod


有時,我們抽象出一個基類,知道要有哪些方法,但只是抽象方法,並不實現功能,只能繼承,

而不能被實例化,但子類必須要實現該方法。看下面的例子:

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,仍然是報錯的,因為抽象基類只能繼承而不能實例化,子類要實例化

必須先實現該方法。

 

為了理解抽象基類,你可以這樣想,我們有水果這個抽象基類,有蘋果,香蕉,桃子類等,但你永遠只能

吃得到蘋果,桃子這些,而不能吃到所謂的“水果”。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM