使用Mix-in类组合功能

为什么需要Mix-in?

在学习面向对象时我们知道,类可以通过继承类获得属性和方法,通过继承可以减少重复代码、提高复用率。Python支持多继承,一个类可以通过继承多个类来得到它们的功能。但多继承会带来一些问题,比如属性冲突。那么有没有可能只继承类的方法呢?

当然方法名称也可能冲突。但如果合理地划分功能的话,这种可能性很小。

Mix-in类(混入类):只定义一些方法给子类使用,不定义自己的实例属性,也不要求调用它的__init__方法。Mix-in类并不是新的语法,只是一种特殊的类,只用来提供方法。

在实际的代码中,我们经常会看到Mixin结尾的类(如SingleObjectMixin),这是一种命名约定,名称其实不会影响功能。

Mix-in 实例

这里借用 通过 Python 理解 Mixin 概念举的例子。

class MappingMixin:def __getitem__(self, key):return self.__dict__.get(key)def __setitem__(self, key, value):return self.__dict__.set(key, value)class Person(MappingMixin):def __init__(self, name, gender, age):self.name = nameself.gender = genderself.age = agep = Person("小陈", "男", 18)
print(p['name'])  # "小陈"
print(p['age'])  # 18

首先定义了一个Person类,然后我们能用字典访问Person,于是定义了一个只有方法的MappingMixin类,并让Person继承MappingMixin的方法。

另一个例子 python 中Mixin混入类的用法:

class Tel:def telfunc(self):print("我可以接打电话")
​
​
class SMS:def smsfunc(self):print("我可以发短信")
​
​
class Phone(Tel, SMS):def __init__(self, sn):self.sn = sn
​def welcome(self):print("welcome {}".format(self.sn))
​
​
p = Phone("xiaomi")
p.telfunc()
p.smsfunc()
p.welcome()

Django中的Mix-in

Django中有很多Mixin类。在django.views.generic.base 中存在如下关系:
django.views.generic.base
View 是一个基类(可以说是一个抽象基类),实现了核心功能如dispatchdispatch委托具体子类的处理方法。
TemplateResponseMixin 为使用模板的视图提供了功能。

RedirectView类只继承 View,可以看到,它实现了 getheadpost 等方法。
TemplateView 只用于显示内容,因此它只实现了 get 方法。由于它需要相关的模板功能,所以继承了TemplateResponseMixin

Django中很多实现都依赖了Mix-in类,而我们在使用Django开发的时候,也可以利用(内置的和自定义的)Mix-in类提供功能。
django mixin文档

参考链接

  1. 通过 Python 理解 Mixin 概念
  2. python 中Mixin混入类的用法
  3. 《流畅的Python》第12章:继承的优缺点
  4. 《Effective Python》(第二版)41.考虑使用Mix-in Classes组合功能
  5. django mixin文档

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

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

相关文章

链表之第一回

欢迎来到我的:世界 收录专栏:链表 希望作者的文章对你有所帮助,有不足的地方还请指正,大家一起学习交流 ! 目录 前言第一题:删除链表的倒数第n个节点第二题:链表的中间结点第三题:合并两个排序…

如何在 iOS 上安装并使用 ONLYOFFICE 文档

借助 iOS 版文档应用,您可在移动端设备上访问存储于 ONLYOFFICE 账户中的文件,查看和编辑现有文本文档、电子表格和演示文稿,创建新文档并对其进行整理,以及连接第三方云存储服务。您可与其他门户网站用户协作编辑文档&#xff0c…

数据结构-栈和队列

目录 栈的概念 栈的使用 ​编辑 模拟实现栈 中缀表达式转后缀表达式 括号匹配 出栈入栈次序匹配 队列概念 队列的使用 栈的概念 栈是一种特殊的线性表,其只允许在固定的一端进行插入和删除元素的操作.进行数据插入和删除操作的一端称为栈顶,;另一端称为栈底.栈中的数据…

【Vue-Router】嵌套路由

footer.vue <template><div><router-view></router-view><hr><h1>我是父路由</h1><div><router-link to"/user">Login</router-link><router-link to"/user/reg" style"margin-left…

动手学DL——MLP多层感知机【深度学习】【PyTorch】

文章目录 4、多层感知机&#xff08; MLP&#xff09;4.1、多层感知机4.1.1、隐层4.1.2、激活函数 σ 4.2、从零实现多层感知机4.3、简单实现多层感知机4.4、模型选择、欠拟合、过拟合4.5、权重衰退4.6、丢失法|暂退法&#xff08;Dropout&#xff09;4.6.1、dropout 函数实现4…

大数据--难点--地图的制作

地图一直是亮点也是难点&#xff0c;刚刚进公司的时候也很难懂~~做出来的也很难看 纯CSS3使用vw和vh视口单位实现h5页面自适应&#xff0c;gulp自动监听sass改动并保存到css中 当修改了sass里面的代码后&#xff0c;gulp会自动监听修改内容并同名保存到css文件夹中&#xff0…

C#字符串占位符替换

using System;namespace myprog {class test{static void Main(string[] args){string str1 string.Format("{0}今年{1}岁&#xff0c;身高{2}cm&#xff0c;月收入{3}元&#xff1b;", "小李", 23, 177, 5000);Console.WriteLine(str1);Console.ReadKey(…

02-C++数据类型-高级

数据类型-高级 4、复合类型 4.4、结构简介 struct inflatable {char name[20];float vol;double price; };inflatable vincent; //C struct inflatable goose; //C例子 // structur.cpp -- a simple structure #include <iostream> struct inflatable // structu…

B057-spring增强 依赖注入 AOP 代理模式 创建Bean

目录 AOP概念代理模式引出AOP实现方式xml方式实现注解方式实现 AOP 概念 事务管理&#xff1a;比如可以抽取try catch的重复代码 日志监控&#xff1a;比如业务逻辑前后打印关于当前订单数量的日志&#xff0c;了解业务做了什么 性能监控&#xff1a;比如业务前后打印时间&…

浪潮信息赵帅:多元算力时代 开源开放的OpenBMC成为服务器管理优先解

“多元算力时代下&#xff0c;大规模的异构服务器设备面临多种处理器架构、多种设备协议、不同管理芯片兼容的系统化设计挑战&#xff0c;管理固件也迎来新的变革。开源开放的OpenBMC&#xff0c;以创新的分层解耦软件架构&#xff0c;兼容不同处理器架构、算力平台和管理芯片&…

人流目标跟踪pyqt界面_v5_deepsort

直接上效果图 代码仓库和视频演示b站视频006期&#xff1a; 到此一游7758258的个人空间-到此一游7758258个人主页-哔哩哔哩视频 代码展示&#xff1a; YOLOv5 DeepSORT介绍 YOLOv5 DeepSORT是一个结合了YOLOv5和DeepSORT算法的目标检测与多目标跟踪系统。让我为您详细解释一…

【字典学习+稀疏编码Sparse Encoding】简单介绍与sklearn的实现方式

文章目录 1、字典学习与稀疏编码2、sklearn的实现3、示例 1、字典学习与稀疏编码 简单来说&#xff0c;稀疏编码就是把输入向量&#xff08;信号&#xff09;/ 矩阵&#xff08;图像&#xff09;表示为稀疏的系数向量和一组超完备基向量&#xff08;字典&#xff09;的线性组合…

ASP.NET WEB API通过SugarSql连接MySQL数据库

注意&#xff1a;VS2022企业版可以&#xff0c;社区版可能存在问题。实体名称和字段和数据库中的要一致。 1、创建项目&#xff0c;安装SqlSugarCore、Pomelo.EntityFrameworkCore.MySql插件 2、文件结构 2、appsettings.json { “Logging”: { “LogLevel”: { “Default”: …

搭建WebDAV服务手机ES文件浏览器远程访问

文章目录 1. 安装启用WebDAV2. 安装cpolar3. 配置公网访问地址4. 公网测试连接5. 固定连接公网地址6. 使用固定地址测试连接 有时候我们想通过移动设备访问群晖NAS 中的文件,以满足特殊需求,我们在群辉中开启WebDav服务,结合cpolar内网工具生成的公网地址,通过移动客户端ES文件…

docker通用镜像方法,程序更新时不用重新构建镜像

docker通用镜像方法&#xff0c;程序更新时不用重新构建镜像。更新可执行文件后&#xff0c;重新启动容器就可运行。 功能 1、在demo目录下添加脚本文件start.sh&#xff0c;里面执行demo.jar文件。 2、将demo目录映射到镜像下的 /workspace目录。 3、Dockerfile文件中默认…

台湾shopee:虾皮电商平台选品方法与市场机遇

台湾Shopee虾皮电商平台为台湾本土卖家和消费者提供了一个线上交易平台。对于想要在台湾市场做虾皮电商的卖家来说&#xff0c;选择合适的产品是非常重要的。本文介绍一些做虾皮电商的选品方法和策略。 首先&#xff0c;了解市场需求是选品的基础。在进入台湾Shopee市场之前&a…

【Spring专题】Spring之Bean的生命周期源码解析——阶段二(IOC之实例化)

目录 前言阅读准备阅读指引阅读建议 课程内容一、SpringIOC之实例化1.1 简单回顾1.2 概念回顾1.3 核心方法讲解 二、方法讲解2.1 AbstractBeanFactory#getMergedLocalBeanDefinition&#xff1a;合并BeanDefinition2.2 AbstractAutowireCapableBeanFactory#createBean&#xff…

安达发APS|APS排产软件之计划甘特图

在当今全球化和竞争激烈的市场环境下&#xff0c;制造业企业面临着巨大的压力&#xff0c;如何在保证产品质量、降低成本以及满足客户需求的同时&#xff0c;提高生产效率和竞争力成为企业需要迫切解决的问题。在这个背景下&#xff0c;生产计划的制定和执行显得尤为重要。然而…

2023年京东按摩仪行业数据分析(京东销售数据分析)

近年来&#xff0c;小家电行业凭借功能与颜值&#xff0c;取代黑电和白电&#xff0c;成为家电市场的主要增长点。在这一市场背景下&#xff0c;颜值更高、功能更丰富、品种更齐全的各类按摩仪&#xff0c;借助新消费和电子商务的风潮&#xff0c;陆续被推上市场。今年&#xf…

【Cocos Creator 项目实战 】消灭星星加强版(附带完整源码工程)

本文乃Siliphen原创&#xff0c;转载请注明出处 目录 概述 游戏整体流程 游戏框架设计 单一职责的类 主要流程控制类 核心玩法模块 UI&#xff1a; 游戏世界&#xff1a; 本文项目的代码组织结构 作者项目实践总结 场景只有一个入口脚本 尽量少在节点上挂载脚本 构…