一、类方法的强制重写与禁止重写

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知识补充的更多相关文章

  1. Python学习---django知识补充之CBV

    Django知识补充之CBV Django: url    -->  def函数      FBV[function based view]  用函数和URL进行匹配 url    --> ...

  2. Redis基础知识补充及持久化、备份介绍(二)--技术流ken

    Redis知识补充 在上一篇博客<Redis基础认识及常用命令使用(一)--技术流ken>中已经介绍了redis的一些基础知识,以及常用命令的使用,本篇博客将补充一些基础知识以及redis ...

  3. CRM中QueryDict和模型表知识补充

    CRM中QueryDict和模型表知识补充 1.QueryDict的用法 request.GET的用法:1.在页面上输入:http://127.0.0.1:8000/index/print(reque ...

  4. Android知识补充(Android学习笔记)

    Android知识补充 ●国际化 所谓的国际化,就是指软件在开发时就应该具备支持多种语言和地区的功能,也就是说开发的软件能同时应对不同国家和地区的用户访问,并针对不同国家和地区的用户,提供相应的.符合 ...

  5. (C/C++学习笔记) 二十四. 知识补充

    二十四. 知识补充 ● 子类调用父类构造函数 ※ 为什么子类要调用父类的构造函数? 因为子类继承父类,会继承到父类中的数据,所以子类在进行对象初始化时,先调用父类的构造函数,这就是子类的实例化过程. ...

  6. SQL语句之 知识补充

    SQL语句之 知识补充 一.存储过程 运用SQL语句,写出一个像函数的模块,这就是存储过程. 需求: 编写存储过程,查询所有员工 -- 创建存储过程(必须要指定结束符号) -- 定义结束符号 DELI ...

  7. 4-5 Scrapy知识补充

    FormRequest FormRequest类是专门用来处理HTML表单的,同时对隐藏的表单处理也很方便.适合用来完成登录操作. 类原型:class scrapy.http.FormRequest( ...

  8. PYTHON 100days学习笔记007-2:python数据类型补充(2)

    目录 day007:python数据类型补充(2) 1.Python3 元组 1.1 访问元组 1.2 删除元组 1.3 元组运算符 1.4 元组索引,截取 1.5 元组内置函数 2.python3 ...

  9. PYTHON 100days学习笔记007-1:python数据类型补充(1)

    目录 day007:python数据类型补充(1) 1.数字Number 1.1 Python 数字类型转换 1.2 Python 数字运算 1.3 数学函数 1.4 随机数函数 1.5 三角函数 1 ...

  10. python 知识点补充

    python 知识点补充 简明 python 教程 r 或 R 来指定一个 原始(Raw) 字符串 Python 是强(Strongly)面向对象的,因为所有的一切都是对象, 包括数字.字符串与 函数 ...

随机推荐

  1. osharp多租户方案

    osharp多租户方案 租户信息 using System; using System.Collections.Generic; using System.Linq; using System.Tex ...

  2. rust学习笔记(8)

    cargo cargo是一个用来帮助控制项目开发的工具 cargo.toml 这是一个用来管理项目的文件 首先是[package]部分 [package] name = "foo" ...

  3. Semaphore.release()方法的底层原理

    一.release() 方法代码解析 当调用 release() 方法时,实际调用的是 AQS 的 releaseShared(1) 方法.以下是其详细工作流程: public final boole ...

  4. python获取指定文件夹内文件名称

    比如下图,文件夹内有若干文件,且文件夹路径:C:\Users\Administrator\Desktop\2147\1024 4行代码,解决问题 import os path = "C:\\ ...

  5. 康谋分享 | 直面AD/ADAS快速开发挑战:IVEX自动驾驶场景管理及分析平台!

    过去十年,自动驾驶和高级驾驶辅助系统 (AD/ADAS) 软件和硬件的开发成为了各大汽车公司的主要投资目标之一.各大汽车公司对 AD/ADAS 持续不断的投资加快了 AD/ADAS 组件的开发周期,但 ...

  6. SpringMVC的执行过程

    环境准备 package org.example.springmvclearn; public record Greeting(long id, String content) { } package ...

  7. 在 Go 语言中,构造一个并发安全的 map 集合

    Map 集合是 Go 中提供的一个 KV 结构的数据类型,对它的操作在实际的开发中应该是非常多的,不过它不是一个线程安全的. 1 .Map 不是线程安全的 编写下面的测试代码: func TestUn ...

  8. 12.ZIP伪加密

    题目是伪加密,打开压缩包,发现里面直接放着flag.txt,但是好像需要输入密码,此时我们在不看题目的第一反应就是破解,但是无果,看了别人的wp之后,了解了一点伪加密. ZIP文件分为:压缩源文件数据 ...

  9. wordpress插件开发时如何通过js调用图库/媒体选择器的问题

    效果: 原文地址: wordpress插件开发通过js调用图库/媒体选择器的问题 - 搜栈网 (seekstack.cn)

  10. bat文件简短

    bat文件 @echo off F: cd\pictures\projectStreet\FloatingShinyKnot-main node server.js cd\ bat静默运行(但会闪一下 ...