程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

【Python】【技能樹評測】技巧實例-說明改進和實踐【03】抽象類

編輯:Python

前言:

Python抽象類更像JAVA的接口調用,在實現多態的封裝上有幫助:
這個知識點,技能樹诠釋例子比較好,但是,概念的定義有點累述,我做了簡潔化。

1 定義:

抽象類是一個特殊的類,只能被繼承,不能被實例化,
集成抽象類的子類必須實現抽象方法,否則會報錯:

2 例子源碼和分析:

import abc #利用abc模塊實現抽象類
class shuiguo(metaclass=abc.ABCMeta):
all_type='sg'
def name(self):
def func(self):
class Apple(shuiguo): #子類繼承抽象類,可是必須定義read和write方法
def name(self):
print('我是蘋果')
def func(self):
print('好吃')
class Pear(shuiguo): #子類繼承抽象類,可是必須定義read和write方法
def name(self):
print('我是梨子')
def func(self):
print('比蘋果甜')
apple =Apple()
pear=Pear()
apple.name()
apple.func()
pear.name()
pear.func()
print(pear.all_type)
print(apple.all_type)

輸出結果:

好吃
我是梨子
sg
sg

2.1 引入adb抽象類

import abc #利用abc模塊實現抽象類

2.2 源碼淺析

源碼這段

@abc.abstractmethod #定義抽象方法,無需實現功能
def name(self):
pass

這是一段抽象類的標准寫法,@abc.abstractmethod【實踐可以省略】, pass 是要寫的關鍵的語句。不寫的的話,會報錯:

IndentationError: expected an indented block

源碼這段

class Apple(shuiguo): #子類繼承抽象類,可是必須定義read和write方法
def name(self):
print(‘我是蘋果’)

Apple 是可以被實例化的類,繼承了抽象類shuiguo,這樣shuiguo的抽象類的方法name,func在實例化的Apple類裡面得到了具體的實現。

源碼這段:

apple =Apple()
pear=Pear()
apple.name()
apple.func()
pear.name()
pear.func()

將對象實例化,並調用了抽象類的方法。

2.3如果抽象類的實例之類不實現抽象類的所有方法,會報錯:


import abc #利用abc模塊實現抽象類
class shuiguo(metaclass=abc.ABCMeta):
all_type='sg'
def name(self):
pass
def func(self):
pass
class Apple(shuiguo): #子類繼承抽象類,可是必須定義read和write方法
class Pear(shuiguo): #子類繼承抽象類,可是必須定義read和write方法
def name(self):
print('我是梨子')
apple =Apple()
pear=Pear()
apple.name()
apple.func()
pear.name()
pear.func()
print(pear.all_type)
print(apple.all_type)

【案,代碼修改去掉了抽象類的read,write的方法,會發生編譯錯誤】

File “”, line 20
class Pear(shuiguo): #子類繼承抽象類,可是必須定義read和write方法
^
IndentationError: expected an indented block


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved