Python知识补充
一、类方法的强制重写与禁止重写
1、强制重写
需求:父类的一个方法,强制子类去重写
方式一:
把父类变成抽象基类,然后给指定的方法加上装饰器@abc.abstractmethod
import abc class Animal(metaclass=abc.ABCMeta):
@abc.abstractmethod
def speak(self):
pass class Dog(Animal):
def speak(self):
print('汪汪叫') class Cat(Animal):
pass d = Dog()
d.speak() c = Cat()
c.speak()
方式二:
指定方法排除NotlmplementedError异常
import abc class Animal(metaclass=abc.ABCMeta):
@abc.abstractmethod
def speak(self): # 给父类的speak方法加上异常语句,它会帮我们检测,这个方法在子类中有没有被重新实现,如果没有,则抛出异常
raise NotImplementedError class Dog(Animal):
def speak(self):
print('汪汪叫') class Cat(Animal):
pass d = Dog()
d.speak() c = Cat()
c.speak()
2、禁止重写
其实这个说法也不太准确,实际是可以重写的,但是无法生效而已
先看下面的常规例子:
class Base:
def go(self):
print("base") def run(self):
self.go() class Extend(Base):
def go(self):
print("extend") p = Extend()
p.run() >> extend
输出结果很正常,和我们预期的一样
接着我们借助私有函数,私有函数的作用范围仅在当前类。
class Base:
def __go(self):
print("base") def run(self):
self.__go() class Extend(Base):
def __go(self):
print("extend") p = Extend()
p.run() >>base
仔细观察,区别只是一个是公开函数,一个是私有函数,其表象上可以被重写,但是实际上并无重写的效果。
Python知识补充的更多相关文章
- Python学习---django知识补充之CBV
Django知识补充之CBV Django: url --> def函数 FBV[function based view] 用函数和URL进行匹配 url --> ...
- Redis基础知识补充及持久化、备份介绍(二)--技术流ken
Redis知识补充 在上一篇博客<Redis基础认识及常用命令使用(一)--技术流ken>中已经介绍了redis的一些基础知识,以及常用命令的使用,本篇博客将补充一些基础知识以及redis ...
- CRM中QueryDict和模型表知识补充
CRM中QueryDict和模型表知识补充 1.QueryDict的用法 request.GET的用法:1.在页面上输入:http://127.0.0.1:8000/index/print(reque ...
- Android知识补充(Android学习笔记)
Android知识补充 ●国际化 所谓的国际化,就是指软件在开发时就应该具备支持多种语言和地区的功能,也就是说开发的软件能同时应对不同国家和地区的用户访问,并针对不同国家和地区的用户,提供相应的.符合 ...
- (C/C++学习笔记) 二十四. 知识补充
二十四. 知识补充 ● 子类调用父类构造函数 ※ 为什么子类要调用父类的构造函数? 因为子类继承父类,会继承到父类中的数据,所以子类在进行对象初始化时,先调用父类的构造函数,这就是子类的实例化过程. ...
- SQL语句之 知识补充
SQL语句之 知识补充 一.存储过程 运用SQL语句,写出一个像函数的模块,这就是存储过程. 需求: 编写存储过程,查询所有员工 -- 创建存储过程(必须要指定结束符号) -- 定义结束符号 DELI ...
- 4-5 Scrapy知识补充
FormRequest FormRequest类是专门用来处理HTML表单的,同时对隐藏的表单处理也很方便.适合用来完成登录操作. 类原型:class scrapy.http.FormRequest( ...
- PYTHON 100days学习笔记007-2:python数据类型补充(2)
目录 day007:python数据类型补充(2) 1.Python3 元组 1.1 访问元组 1.2 删除元组 1.3 元组运算符 1.4 元组索引,截取 1.5 元组内置函数 2.python3 ...
- PYTHON 100days学习笔记007-1:python数据类型补充(1)
目录 day007:python数据类型补充(1) 1.数字Number 1.1 Python 数字类型转换 1.2 Python 数字运算 1.3 数学函数 1.4 随机数函数 1.5 三角函数 1 ...
- python 知识点补充
python 知识点补充 简明 python 教程 r 或 R 来指定一个 原始(Raw) 字符串 Python 是强(Strongly)面向对象的,因为所有的一切都是对象, 包括数字.字符串与 函数 ...
随机推荐
- QTableView实现在表格内直接对数据库内容进行修改、新增和删除等操作
文章目录 前言 QSqlTableModel 新增 删除 修改 提交 取消 前言 本文主要利用QSqlTableModel+QTableView来实现直接在QTableView中进行对数据库数据的操作 ...
- python ImportError: libGL.so.1: cannot open shared object file: No such file or directory
前言 python 报错python ImportError: libGL.so.1: cannot open shared object file: No such file or director ...
- Go语言遍历字符串——获取每一个字符串元素
遍历字符串有下面两种写法. 遍历每一个ASCII字符 遍历 ASCII 字符使用 for 的数值循环进行遍历,直接取每个字符串的下标获取 ASCII 字符,如下面的例子所示. theme := &qu ...
- 搭建自己的OCR服务,第一步:选择合适的开源OCR项目
一.OCR是什么? 光学字符识别(Optical Character Recognition, OCR)是指对文本资料的图像文件进行分析识别处理,获取文字及版面信息的过程. 亦即将图像中的文字进行识别 ...
- centos7下扩展根分区(图文详解)
df -h 查看当前系统磁盘使用状况 fdisk -l 可以看见,我新添加了一块硬盘,大小为10G,新磁盘/dev/sdb fdisk /dev/sdb 对新的磁盘进行分区 在交互模 ...
- spring 事务失效的 12 种场景
看这个:https://blog.csdn.net/hanjiaqian/article/details/120501741里面有12种失效场景以及如何解决. 在 spring 中为了支持编程式事务, ...
- Anonymous打靶学习笔记(5)
参考视频https://www.bilibili.com/video/BV1XufaYAEKc/?spm_id_from=333.1387.search.video_card.click 常见的100 ...
- 学习Linux命令的正确姿势
大家好,我是良许. 大家应该注意到了,最近我的公众号文章末尾都挂着自己录制的<Linux命令从小白到大神>课程. 这个课程我从开始录制到制作完成,足足花了一个半月.如果加上前期的资料收集与 ...
- 解决VSCODE进行C代码编辑时结构体成员不可见或不提示的问题
在使用VSCODE进行C代码编辑时,结构体成员有时可见,光标放到成员上时,系统会提示结构体成员对应的注释信息,但是有时候却不行. 经过测试,发现有如下规律:以test.c test.h include ...
- 🎀spring @conditional介绍及使用
简介 @Conditional 是 Spring 框架中用于条件化注册 Bean的核心注解,它允许开发者根据特定条件决定是否将某个Bean注册到 Spring 容器中.这一机制在实现多环境配置.模块化 ...