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)面向对象的,因为所有的一切都是对象, 包括数字.字符串与 函数 ...
随机推荐
- 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
目录 什么是 Selenium 环境搭建与配置 安装 Selenium 下载浏览器驱动 基础操作 启动浏览器并访问网页 定位网页元素 通过 ID 定位 通过 CSS 选择器定位 通过 XPath 定位 ...
- osharp多租户方案
osharp多租户方案 租户信息 using System; using System.Collections.Generic; using System.Linq; using System.Tex ...
- windows linux子系统(Ubuntu)ip地址
在Windows10安装好了的子系统(Ubuntu)上,安装了nginx 想去访问,使用ipconfig .ip add,查询来的ip地址都跟自己Windows10的ip完全一样,难道Linux子系统 ...
- 容器一直处于Create状态
通过命令排查 docker inspect b5be1d9e71de报错 "Error": "Could not attach to network fabric-tbc ...
- 大型通用电子制造执行系统(MES)
简介: 系统参考西门子MOM智能制造Opcenter工业软件制造执行系统Camstar电子套件人机料法环数据建模业务对象和车间生产执行事务逻辑,采用面向对象分层设计与C#编程开发:包含电子制造企业 ...
- Arrays工具类--java进阶day06
1.Arrays工具类 这些方法都是针对数组,并且都被static修饰,可以直接使用类名进行调用 1.toString 将数组拼接成带有相对应格式的字符串,可用于展示数组 2.equals 比较两个数 ...
- Golang HTTPS
用golang来实现的webserver通常是是这样的 //main.go package main import ( "fmt" "io" "net ...
- Kubernetes基础教程-通过部署Nginx快速学习基本使用命令
1.验证节点信息 1.1.查看控制平面组件的状态 [root@linux-servertwo software]# kubectl get cs Warning: v1 ComponentStatus ...
- nodejs读写redis和mongo
nodejs读写redis https://redis.io/commands https://www.npmjs.com/package/redis var redis = require('red ...
- Spring底层AOP代码实现
一. AOP功能测试 ①. pom.xml 依赖导入 ②. 目标类 ③. 切面类 ④. 配置类 ⑤. 测试类 二. AOP原理-@EnableAspectJAutoProxy AOP原理:[看给容器中 ...