首页 > 编程语言 >Python进阶之抽象类

Python进阶之抽象类

时间:2024-05-10 16:44:22浏览次数:24  
标签:__ 进阶 Python self 抽象类 data def name

【一】什么是抽象类

  • 与java一样,python也有抽象类的概念但是同样需要借助模块实现,抽象类是一个特殊的类,它的特殊之处在于只能被继承,不能被实例化

【二】为什么要有抽象类

  • 如果说类是从一堆对象中抽取相同的内容而来的,那么抽象类就是从一堆类中抽取相同的内容而来的,内容包括数据属性和函数属性

  • 从实现角度来看,抽象类与普通类的不同之处在于:抽象类中只能有抽象方法(没有实现功能),该类不能被实例化,只能被继承,且子类必须实现抽象方法。这一点与接口有点类似,但其实是不同的,即将揭晓答案

【三】抽象类的实现

  • 利用abc模块实现抽象类
# 【1】不重写抽象类方法
import abc


class Animal(metaclass=abc.ABCMeta):
    def __init__(self, name, age):
        self.name = name
        self.age = age

    @abc.abstractmethod
    def run(self):
        print(F'{self.name}可以到处跑!')


class Dog(Animal):
    def __init__(self, name, age):
        super().__init__(name, age)


# 子类不重写父类的方法就会报错
dog = Dog('小七', 2)
dog.run()
# Can't instantiate abstract class Dog with abstract method run

#【2】重写抽象类方法
import abc


class Animal(metaclass=abc.ABCMeta):
    def __init__(self, name, age):
        self.name = name
        self.age = age

    @abc.abstractmethod
    def run(self):
        print(F'{self.name}可以到处跑!')


class Dog(Animal):
    def __init__(self, name, age):
        super().__init__(name, age)

    # 在子类中重写父类的方法
    def run(self):
        print(F'{self.name}可以到处跑!')


dog = Dog('小七', 2)
dog.run()
# 小七可以到处跑!

【四】示例

import os
import abc
import json


class FileCheck(metaclass=abc.ABCMeta):
    def __init__(self):
        self.BASE_DIR = os.path.dirname(__file__)
        self.encoding = 'utf-8'

    @abc.abstractmethod
    def read_data(self):
        print('读取数据方法')

    @abc.abstractmethod
    def save_data(self):
        print('保存数据方法')


# 文本文件处理类
class TextFileCheck(FileCheck):
    def __init__(self):
        super().__init__()
        self.file_path = os.path.join(self.BASE_DIR, 'data.text')

    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_text = TextFileCheck()
print(obj_text.read_data())


# json文件处理类
class JsonFileCheck(FileCheck):
    def __init__(self):
        super().__init__()
        self.__ensure_ascii = False
        self.file_path = os.path.join(self.BASE_DIR, 'data.json')

    def read_data(self):
        with open(file=self.file_path, mode='r', encoding=self.encoding) as fp:
            data = json.load(fp=fp)
        return data

    def save_data(self):
        with open(file=self.file_path, mode='w', encoding=self.encoding) as fp:
            json.dump(obj={'username': "dream"}, fp=fp, ensure_ascii=self.__ensure_ascii)


json_obj = JsonFileCheck()
print(json_obj.read_data())

标签:__,进阶,Python,self,抽象类,data,def,name
From: https://www.cnblogs.com/ligo6/p/18183499

相关文章

  • Python进阶之封装
    【一】面向对象的三大特性面向对象的三大特性:封装、继承、多态其中最重要的就是封装,封装就是将数据和功能整合到一起我们可以对封装在类和对象中的属性进行访问的控制,有隐藏的和开发的接口【1】什么是封装封装是对具体对象的一种抽象封装就是将某些数据和功能隐藏起来,只......
  • Python-有序字典OrderedDict练习题
    问题:读取键盘输入结果,创建n个键值对,将其排序后放入有序字典并输出。详细描述:根据提示,实现函数功能:读取n(n>0)行输入,以每一行的数据为key,行号(从0开始)为value,建立n对键值对,然后将他们按照key排序后,放入一个有序字典,最后输出这个有序字典。importcollectionsdefFunc():pairs......
  • python教程10-集合
    集合(set)是一个无序的不重复元素序列。集合中的元素不会重复,并且可以进行交集、并集、差集等常见的集合操作。可以使用大括号 {} 创建集合,元素之间用逗号 , 分隔,或者也可以使用 set() 函数创建集合。集合创建:注意:创建一个空集合必须用 set() 而不是 {},因为 {} ......
  • python教程10-元祖
    元组(tuple)与列表类似,不同之处在于元组的元素不能修改。因此很少使用元组使用小括号 (),列表使用方括号 [] 元组中只包含一个元素时,需要在元素后面添加逗号 , ,否则括号会被当作运算符使用:元祖调用:修改元祖元组中的元素值是不允许修改的,但我们可以对元组进行连接组......
  • python异常的一些代码笔记
    点击查看代码whileTrue:try:x=int(input("请输入一个数字:"))print("你输入的数字是:",x)except:print("异常,输入的不是数字:")try:a=input("请输入被除数:")b=input("请输入除数:")c=float(a)/float......
  • 使用Python进行数据分析的基本步骤和技巧
    ......
  • python教程9-第三方模块安装
    https://pypi.python.org/pypi是python的开源模块库。收录了⾃全世界python开发者贡献的模块,⼏乎涵盖了你想⽤python做的任何事情。事实上每个python开发者,只要注册⼀个账号就可以往这个平台上传你⾃⼰的模块,这样全世界的开发者都可以容易的下载并使⽤你的模块。下载和安装:......
  • python 映射类型 dict
    dict定义字典(Dict)是一种用于存储键-值对数据的数据结构。字典使用花括号{}来创建,每个键值对之间使用冒号:分隔。可变的、无序的、key不重复。dict的特点键值对存储:字典是由键值对构成的集合,每个键值对之间使用冒号(:)分隔,键和值之间使用逗号分隔,所有键都是唯一的。无序性:字典......
  • python教程8-页面爬虫
    python爬虫常用requests和beautifulSoup这2个第三方模块。需要先进行手动安装。requests负责下载页面数据,beautifulSoup负责解析页面标签。关于beautifulSoup的api使用,详见api页面:https://beautifulsoup.readthedocs.io/zh-cn/v4.4.0/#find-all豆瓣评论中邮箱数据爬取案例:imp......
  • 微信电脑文件清理python程序
    importos,refromitertoolsimportcombinations#两两组合defcombinations_iterative(elements):returnlist(combinations(elements,2))#将按照字符串长度升序排列defsort_by_length(lst):#定义一个自定义排序函数,按字符串长度排序deflength_sort(it......