抽象类介绍

抽象类

【一】什么是抽象

# 将某几个具体的生物,根据特征总结成一个类,逐层向上总结
# 唐老鸭 肉鸭 北京烤鸭 ---> 鸭子
# 北极熊 黑熊 --> 熊
# 猫 老虎 --> 猫科
# 鸭子 熊 猫科 --> 动物

【二】什么是继承

# 动物 ---> 熊 ---> 黑熊
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())

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/13119.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【刷题篇】二分查找(二)

文章目录 1、山脉数组的峰顶索引2、寻找峰值3、寻找旋转排序数组中的最小值4、LCR 点名 1、山脉数组的峰顶索引 符合下列属性的数组 arr 称为 山脉数组 &#xff1a; arr.length > 3 存在 i&#xff08;0 < i < arr.length - 1&#xff09;使得&#xff1a; arr[0] &l…

macOS Ventura 13如何设置定时重启(命令行)

文章目录 macOS Ventura 13如何设置定时重启(命令行)前言具体设置步骤及命令解释其他 macOS Ventura 13如何设置定时重启(命令行) 前言 由于升级 macOS 13 Ventura 之后&#xff0c;之前在节能里面通过鼠标点击设置开机关机的方法不能用了&#xff0c;现在只能用命令设置开机…

css笔记总结2

找到所有的 h1 标签。 选择器&#xff08;选对人&#xff09; 设置这些标签的样式&#xff0c;比如颜色为红色&#xff08;做对事&#xff09;。 ##css基础选择器 基础选择器又包括&#xff1a;标签选择器、类选择器、id 选择器和通配符选择器 ###标签选择器&#xff1a; 标签…

【PB案例学习笔记】-03用户名密码校验

写在前面 通过一个个由浅入深的编程实战案例学习&#xff0c;提高编程技巧&#xff0c;以保证小伙伴们能应付公司的各种开发需求。 文章中设计到的源码&#xff0c;小凡都上传到了gitee代码仓库https://gitee.com/xiezhr/pb-project-example.git 需要源代码的小伙伴们可以自行…

KNN算法处理多元分类任务

概述 这个案例还是基于之前的案例进行改造。 之前的案例代码完整如下&#xff1a; from sklearn.datasets import make_blobs # KNN 分类器 from sklearn.neighbors import KNeighborsClassifier # 画图工具 import matplotlib.pyplot as plt # 数据集拆分工具 from sklearn…

ur5 moveit配置过程

ros-noeticur5机械臂抓取仿真_ros机械臂视觉抓取仿真-CSDN博客

Java获取请求参数

1.简单参数接收 前端请求参数与Controller接受变量名一致 如果参数名不一致&#xff0c;接受不成功。 可以用RequestParam指定参数名&#xff0c;可以用username接收&#xff08;不推荐&#xff09;。 required true&#xff0c;表示参数必须传递&#xff0c;如果不传递会报错…

std文件中写入内容基础

在C中&#xff0c;使用标准库中的std::fstream类可以进行文件操作&#xff0c;包括文件的读取和写入。下面是一些常见的文件写入模式及其介绍&#xff1a; 文件写入模式 std::ofstream (Output File Stream) 专门用于文件写入的流。默认模式下&#xff0c;如果文件不存在&…

连通民心,服务无界:政务热线系统打造便捷政务新时代

一.引言 在21世纪的数字浪潮中&#xff0c;政府服务模式正经历着前所未有的变革。随着信息技术的飞速发展&#xff0c;民众对于政务服务的期待已不再局限于传统的面对面交流&#xff0c;而是更加倾向于高效、便捷、全天候的服务体验。在此背景下&#xff0c;政务热线系统应运而…

深入剖析Tomcat(八) 载入器与打破双亲委派机制的自定义类加载器

写这篇文章让我头大了好几天&#xff0c;书中描述的内容倒是不多&#xff0c;可能也是那会Tomcat的现状。如今Tomcat发展了好多代&#xff0c;加上springboot的广泛应用&#xff0c;导致现在的类加载的步骤和Tomcat资料中描述的大相径庭。可能也是由于微服务的发展&#xff0c;…

环形数组介绍要点和难点具体应用实例和代码解析

环形数组(或称为循环数组、圆形数组)是一种逻辑结构,其中数组的末尾和开头在逻辑上是相连的,从而形成一个环或圈。在实际的物理存储中,环形数组通常是一个普通的线性数组,但在访问和操作时采用特定的逻辑来处理边界条件,使得元素可以从数组的末尾“循环”到开头,或者从…

基于 Spring Boot 博客系统开发(十)

基于 Spring Boot 博客系统开发&#xff08;十&#xff09; 本系统是简易的个人博客系统开发&#xff0c;为了更加熟练地掌握 SprIng Boot 框架及相关技术的使用。&#x1f33f;&#x1f33f;&#x1f33f; 基于 Spring Boot 博客系统开发&#xff08;九&#xff09;&#x1f…

MySQL 开源到商业(四):MySQL 成了烫手山芋

前文提到&#xff0c;Monty 得知 Oracle 收购 Sun 的提案得到了美国政府的支持后&#xff0c;发动社区用户向欧盟委员会请愿&#xff0c;希望通过反垄断的名义让 Oracle 知难而退&#xff0c;进而实现剥离 MySQL 的目的。而 Oracle 为了得到欧盟委员会的许可&#xff0c;迅速提…

Golang | Leetcode Golang题解之第91题解码方法

题目&#xff1a; 题解&#xff1a; func numDecodings(s string) int {n : len(s)// a f[i-2], b f[i-1], c f[i]a, b, c : 0, 1, 0for i : 1; i < n; i {c 0if s[i-1] ! 0 {c b}if i > 1 && s[i-2] ! 0 && ((s[i-2]-0)*10(s[i-1]-0) < 26) {c…

Navicat 干货 | 探索 PostgreSQL 中不同类型的约束

PostgreSQL 的一个重要特性之一是能够对数据实施各种约束&#xff0c;以确保数据完整性和可靠性。今天的文章中&#xff0c;我们将概述 PostgreSQL 的各种约束类型并结合免费的 "dvdrental" 示例数据库 中的例子探索他们的使用方法。 1. 检查约束&#xff1a; 检查…

颜色的表示和还原(一)

这篇文章主要提炼于ICCV 2019 Tutorial: Understanding Color and the In-Camera Image Processing Pipeline for Computer Vision。里面深入浅出地讲解了很多ISP中的基础知识&#xff0c;这里主要对颜色相关的部分做一点总结。 假设不成立了 相机经常被简单地看作是衡量光线…

STM32学习计划

前言&#xff1a; 这里先记录下STM32的学习计划。 2024/05/08 今天我正在学习的是正点原子的I.MX6ULL APLHA/Mini 开发板的 Linux 之ARM裸机第二期开发的视频教程&#xff0c;会用正点原子的I.MX6ULL开发板学习第二期ARM裸机开发的教程&#xff0c;然后是学习完正点原子的I.M…

Mybatis基础操作-删除

Mybatis基础操作-删除 删除 package com.itheima.mapper;import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Mapper;Mapper //在运行时&#xff0c;会自动生成该接口的实现类对象&#xff08;代理对象&#xff09;&#xff0c;并且将该对象…

QT:QML与C++交互

目录 一.介绍 二.pro文件添加模块 三.h文件 四.cpp文件 五.注册 六.调用 七.展示效果 八.代码 1.qmlandc.h 2.qmlandc.cpp 3.main.cpp 4.qml 一.介绍 在 Qt 中&#xff0c;QML 与 C 交互是非常重要的&#xff0c;因为它允许开发人员充分利用 QML 和 C 各自的优势&…

我21岁玩“撸货”,被骗1000多万

最近&#xff0c;撸货业界内发生了一些颇受瞩目的事件。 在郑州&#xff0c;数码档口下面抢手团长跑路失联&#xff0c;涉及金额几百万&#xff0c;在南京&#xff0c;一家知名的电商平台下的收货站点突然失联&#xff0c;涉及金额高达一千多万&#xff0c;令众多交易者震惊不已…