抽象類
【一】什么是抽象
# 將某幾個具體的生物,根據特征總結成一個類,逐層向上總結 # 唐老鴨 肉鴨 北京烤鴨 ---> 鴨子 # 北極熊 黑熊 --> 熊 # 貓 老虎 --> 貓科 # 鴨子 熊 貓科 --> 動物
【二】什么是繼承
# 動物 ---> 熊 ---> 黑熊
class Animal(object): ?def speak(self):print(f"動物叫") ?def __init__(self, color, foot, hand):self.color = colorself.foot = footself.hand = hand ? ? class Blackbear(Animal):def __init__(self, color, foot, hand):super().__init__(color, foot, hand) ? ? bear = Blackbear('black', 2, 2) print(bear.color, bear.foot, bear.hand) bear.speak()
【三】抽象類
-
所有繼承父類的子類都必須重寫父類的某些方法,這個父類就叫抽象類
import abc ? ? class Animal(metaclass=abc.ABCMeta): ?def __init__(self, color, foot, hand):self.color = colorself.foot = footself.hand = hand ?def speak(self):print(f"動物叫") ?# 使用abc裝飾完以后在子類中必須重寫@abc.abstractmethoddef walk(self):pass ? ? class Blackbear(Animal):def __init__(self, color, foot, hand):super().__init__(color, foot, hand) ?# 使用abc裝飾完以后在子類中必須重寫def walk(self):pass ? ? bear = Blackbear('black', 2, 2) print(bear.color, bear.foot, bear.hand) bear.speak()
-
文件處理示例
import os import abc ? ? class FileCheck(metaclass=abc.ABCMeta):def __init__(self):self.BASE_DIR = os.path.dirname(__file__)self.encoding = 'utf-8' ?@abc.abstractmethoddef read_data(self):print(f"讀取數據") ?@abc.abstractmethoddef save_data(self):print(f"保存數據") ? ? # 文本文件處理類 class TextFileCheck(FileCheck):def __init__(self):super().__init__()self.file_path = os.path.join(self.BASE_DIR, 'data.txt') ?# 讀def read_data(self):with open(file=self.file_path, mode='r', encoding=self.encoding) as fp:data = fp.read()return data# 寫保存def save_data(self):with open(file=self.file_path, mode='w', encoding=self.encoding) as fp:fp.write("天下無雙") ? ? obj_txt = TextFileCheck() print(obj_txt.save_data()) print(obj_txt.read_data()) ? import json ? ? # json文件處理類 class JsonFileCheck(FileCheck):def __init__(self):super().__init__()self.__ensure_ascii = Falseself.file_path = os.path.join(self.BASE_DIR, 'data.json') ?# 讀def read_data(self):with open(self.file_path, mode='r', encoding=self.encoding) as fp:data = json.load(fp=fp)return data# 寫保存def save_data(self):with open(self.file_path, mode='w', encoding=self.encoding) as fp:json.dump(obj={'username': 'knight'}, fp=fp, ensure_ascii=self.__ensure_ascii) ? ? json_obj = JsonFileCheck() print(json_obj.save_data()) print(json_obj.read_data())