当前位置: 首页 > news >正文

python魔法(python高级magic方法进阶)

python特殊方法(magic方法也叫魔术方法)

魔法方法是python的内置函数,一般以双下划线开头和结尾,

构造和初始化

每个人都知道一个最基本的魔术方法, init 。

通过此方法我们可以定义一个对象的初始操作。

然而,当我调用 x = SomeClass() 的时候, init 并不是第一个被调用的方法。

实际上,还有一个叫做 new 的方法,来构造这个实例。

然后给在开始创建时候的初始化函数来传递参数。

在对象生命周期的另一端,也有一个 del 方法。我们现在来近距离的看一看这三个方法:

new(cls, [...) new 是在一个对象实例化的时候所调用的第一个方法。它的第一个参数是这个类,其他的参数是用来直接传递给 init 方法。 new 方法相当不常用,但是它有自己的特性,特别是当继承一个不可变的类型比如一个tuple或者string。我不希望在 new 上有太多细节,因为并不是很有用处,但是在 Python文档 中有详细的阐述。

init(self, […) 此方法为类的初始化方法。当构造函数被调用的时候的任何参数都将会传给它。(比如如果我们调用 x = SomeClass(10, 'foo')),那么 init 将会得到两个参数10和foo。 init 在Python的类定义中被广泛用到。

del(self) 如果 new 和 init 是对象的构造器的话,那么 del 就是析构器。它不实现语句 del x (以上代码将不会翻译为 x.del() )。它定义的是当一个对象进行垃圾回收时候的行为。当一个对象在删除的时需要更多的清洁工作的时候此方法会很有用,比如套接字对象或者是文件对象。注意,如果解释器退出的时候对象还存存在,就不能保证 del 能够被执行,所以 del can’t serve as a replacement for good coding practices ()~~~

放在一起的话,这里是一个 init 和 del

实际使用的例子

from os.path import joinclass FileObject:'''给文件对象进行包装从而确认在删除时文件流关闭'''def __init__(self, filepath='~', filename='sample.txt'):#读写模式打开一个文件self.file = open(join(filepath, filename), 'r+')def __del__(self):self.file.close()del self.file

name

代码入口在此——这是“if name==’main:”这条代码的意义之一。1. name的理解1.1 为什么使用name属性?Python解释器在导入模块时,会将模块中没有缩进的代码全部执行一遍(模块就是一个独立的Python文件)。开发人员通常会在模块下方增加一些测试代码,为了避免这些测试代码在模块被导入后执行,可以利用name属性。

当你要导入某个模块,但又不想改模块的部分代码被直接执行,那就可以这一部分代码放在“if name=='main':”内部。

其他方法和属性

__init__ :      构造函数,在生成对象时调用
__del__ :       析构函数,释放对象时使用
__repr__ :      打印,转换
__setitem__ :   按照索引赋值
__getitem__:    按照索引获取值
__len__:        获得长度
__cmp__:        比较运算
__call__:       调用
__add__:        加运算
__sub__:        减运算
__mul__:        乘运算
__div__:        除运算
__mod__:        求余运算
__pow__:        幂

call() 如果为一个类编写了该方法,那么在该类的实例后面加括号,可会调用这个方法。

注:构造方法的执行是由类加括号执行的,即:对象 = 类名(),而对于call() 方法,是由对象后加括号触发的,即:对象() 或者 类()()

getitem()、setitem()、delitem() 取值、赋值、删除这“三剑客”的套路,在Python中,我们已经见过很多次了,比如前面的@property装饰器。

Python中,标识符后面加圆括号,通常代表执行或调用方法的意思。而在标识符后面加中括号[],通常代表取值的意思。Python设计了getitem()、setitem()、delitem()这三个特殊成员,用于执行与中括号有关的动作。它们分别表示取值、赋值、删除数据。

相关文章:

python魔法(python高级magic方法进阶)

python特殊方法(magic方法也叫魔术方法) 魔法方法是python的内置函数,一般以双下划线开头和结尾, 构造和初始化 每个人都知道一个最基本的魔术方法, init 。 通过此方法我们可以定义一个对象的初始操作。 然而,当我调用 x S…...

【论文笔记】Flamingo: a Visual Language Model for Few-Shot Learning

🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。 基本信息 标题: Flamingo: a Visual Langu…...

问:JAVA阻塞队列实现类及最佳实践?

在多线程编程中,阻塞队列作为一种关键的数据结构,为线程间安全、高效的数据交换提供了重要支持。Java的java.util.concurrent包中提供了多种阻塞队列的实现,每种实现都有其独特的特点和适用场景。 一、阻塞队列实现类 以下是Java中Blocking…...

Springboot3 + MyBatis-Plus + MySql + Vue + ProTable + TS 实现后台管理商品分类(最新教程附源码)

Springboot3 MyBatis-Plus MySql Uniapp 商品加入购物车功能实现(针对上一篇sku) 1、效果展示2、数据库设计3、后端源码3.1 application.yml 方便 AliOssUtil.java 读取3.2 model 层3.2.1 BaseEntity3.2.1 GoodsType3.2.3 GoodsTypeSonVo3.3 Controll…...

消费电子制造企业如何使用SAP系统提升运营效率与竞争力

在当今这个日新月异的消费电子市场中,企业面临着快速变化的需求、激烈的竞争以及不断攀升的成本压力。为了在这场竞赛中脱颖而出,消费电子制造企业纷纷寻求数字化转型的突破点,其中,SAP系统作为业界领先的企业资源规划(ERP)解决方…...

算法记录——树

二叉树 3.1二叉树的最大深度 思路:二叉树的最大深度 根节点的最大高度。因此本题可以转换为求二叉树的最大高度。 而求高度的时候应该采用后序遍历。遍历顺序为:左右中。每次遍历的节点按后序遍历顺序,先收集左右孩子的最大高度,…...

单片机在控制和自动化任务中的应用场景广泛

单片机在控制和自动化任务中的应用场景广泛,以下是一些具体示例: 1. 家电控制 洗衣机:单片机用于控制洗衣周期、温度和水位。微波炉:控制加热时间、功率和用户界面。 2. 工业自动化 生产线监控:单片机用于控制传送…...

UEFI EDK2框架学习(三)——protocol

一、Protocol协议 搜索支持特定Protocol的设备&#xff0c;获取其Handle gBS->LocateHandleBuffer 将内存中的Driver绑定到给定的ControllerHandle gBS->OpenProtocol 二、代码实现 Protocol.c #include <Uefi.h> #include <Library/UefiLib.h> #includ…...

PostgreSQL的字段存储类型了解

PostgreSQL的字段存储类型了解 在 PostgreSQL 中&#xff0c;每个字段&#xff08;列&#xff09;都有其存储类型&#xff0c;这些存储类型决定了数据库如何存储和处理该字段的数据。了解和适当地利用这些存储类型&#xff0c;可以提高数据库的性能和存储效率。 主要的存储类…...

CTFshow 命令执行 web29~web36(正则匹配绕过)

目录 web29 方法一&#xff1a;include伪协议包含文件读取 方法二&#xff1a;写入文件 方法三&#xff1a;通识符 web30 方法一&#xff1a;filter伪协议文件包含读取 方法二&#xff1a;命令执行函数绕过 方法三&#xff1a;写入文件 web31 方法一&#xff1a;filter伪…...

【顺序表使用练习】发牌游戏

【顺序表使用练习】发牌游戏 1. 介绍游戏2. 实现52张牌3. 实现洗牌4. 实现发牌5. 效果展示 1. 介绍游戏 首先先为大家介绍一下设计要求 实现52张牌&#xff08;这里排除大小王&#xff09;洗牌——打乱牌的顺序发牌——3个人&#xff0c;1人5张牌 2. 实现52张牌 创建Code对象创…...

1.7 编码与调制

欢迎大家订阅【计算机网络】学习专栏&#xff0c;开启你的计算机网络学习之旅&#xff01; 文章目录 前言前言1 基本术语2 常用的编码方法2.1 不归零编码2.2 归零编码2.3 反向归零编码2.4 曼彻斯特编码2.5 差分曼彻斯特编码 3 常用的调制方法3.1 调幅&#xff08;AM&#xff09…...

004集—— txt格式坐标写入cad(CAD—C#二次开发入门)

如图所示原始坐标格式&#xff0c;xy按空格分开&#xff0c;将坐标按顺序在cad中画成多段线&#xff1a; 坐标xy分开并按行重新输入txt&#xff0c;效果如下&#xff1a; 代码如下 &#xff1a; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.Runtime; us…...

CSS中的font-variation-settings:探索字体的可变性

随着Web字体的发展&#xff0c;设计师们不再局限于传统的字体样式。现代Web字体支持可变字体&#xff08;Variable Fonts&#xff09;&#xff0c;这种字体允许开发者在单一的字体文件中包含多种字形样式。通过使用CSS中的font-variation-settings属性&#xff0c;我们可以控制…...

组合优化与凸优化 学习笔记5 对偶拉格朗日函数

有的时候约束条件有点难搞&#xff0c;我们可以把它放到目标函数里面。 记得之前凸函数的时候的结论吗&#xff1f;一大堆函数&#xff0c;每一段都取最大的&#xff0c;最后会得到一个凸函数。同理&#xff0c;每一段都取最小的&#xff0c;得到的是一个凹函数。就这样&#x…...

监控易监测对象及指标之:Exchange邮件服务器监测

在现代企业运营中&#xff0c;邮件服务器的作用至关重要&#xff0c;它不仅承载着企业内外的信息传递&#xff0c;还是协同工作的重要工具。为了确保邮件服务器的稳定运行&#xff0c;以及邮件的顺畅收发&#xff0c;采用高效的监控系统是不可或缺的。监控易作为一款专业的监控…...

【机器学习基础】Transformer学习

Transformer学习 梯度消失FeedForward层激活函数的主要作用是在网络中加入非线性变换 梯度消失 梯度爆炸 FeedForward层 Transformer结构: Transformer结构主要分为两大部分: 一是Encoder层结构:Encoder 的输入由 Input Embedding 和 Positional Embedding 求和输入Multi…...

mysql如何不使用窗口函数,去统计出入库情况

mysql如何不使用窗口函数&#xff0c;去统计出入库情况 你把这个表看做 进出库表&#xff0c;每个物料把时间正序后 依次累加数量 &#xff0c;看这个物料的时间线上 是否会出现负数&#xff0c;1号进货5个 2号出库3个 3号你不能出库3个 最多俩个 不然就是负库存&#xff0c;…...

uni-app canvas文本自动换行

封装 支持单行文本超出换行。多行文本顺位排版 // 填充自动换行的文本function fillFeedText({ctx, text, x, y, maxWidth, lineHeight, color, size}) {// 文本配置ctx.setFontSize(size);ctx.setFillStyle(color);// 计算文本换行宽高&#xff0c;换行逻辑const words text…...

【设计模式-职责链】

定义 职责链模式是一种行为设计模式&#xff0c;**它通过将请求发送给链上的多个处理者来避免请求发送者与处理者之间的紧密耦合。每个处理者可以选择处理请求或将其传递给链中的下一个处理者。**这样&#xff0c;可以将处理请求的责任链式组织&#xff0c;从而实现更灵活的请…...

OpenClaw+ollama-QwQ-32B实战:自动化处理100份简历筛选

OpenClawollama-QwQ-32B实战&#xff1a;自动化处理100份简历筛选 1. 为什么选择自动化简历筛选 去年团队扩张时&#xff0c;我作为技术负责人参与了简历初筛工作。面对雪片般飞来的PDF简历&#xff0c;连续三天熬夜到凌晨两点手动整理关键信息后&#xff0c;我意识到必须寻找…...

别再只懂概念了!用JSEncrypt库5分钟搞定前端RSA密码加密实战

前端RSA加密实战&#xff1a;用JSEncrypt保护用户密码传输安全 1. 为什么前端需要加密&#xff1f; 在Web应用开发中&#xff0c;用户登录是最基础也最敏感的操作之一。传统表单提交直接将密码以明文形式发送到服务器&#xff0c;这在网络传输过程中存在被截获的风险。即使使…...

为什么你的Tinymce总是显示秘钥提示?深入解析富文本编辑器的授权机制

解密Tinymce授权机制&#xff1a;从技术原理到合规实践 每次启动项目时&#xff0c;那个突兀的"未授权"提示框是否让你感到困扰&#xff1f;作为前端开发领域的标配工具&#xff0c;Tinymce的授权机制远比表面看到的复杂。让我们拨开迷雾&#xff0c;从技术实现到商业…...

基于spring和vue的企业原材料库存盘点食品厂管理系统

目录技术选型与架构设计核心功能模块划分数据库设计要点关键技术实现前端交互优化系统安全措施测试与部署方案扩展性设计项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作技术选型与架构设计 后端采用Spring Boot框架&#xff0…...

Nunchaku-flux-1-dev部署避坑指南:解决403 Forbidden错误

Nunchaku-flux-1-dev部署避坑指南&#xff1a;解决403 Forbidden错误 部署Nunchaku-flux-1-dev时遇到403 Forbidden错误&#xff1f;别急&#xff0c;这篇文章手把手带你排查和解决这个常见但棘手的问题。 最近在部署Nunchaku-flux-1-dev时&#xff0c;不少小伙伴反映遇到了403…...

实用教程!用fft npainting lama镜像批量处理图片水印

实用教程&#xff01;用fft npainting lama镜像批量处理图片水印 1. 引言 1.1 为什么需要批量水印处理 在日常工作中&#xff0c;我们经常遇到需要处理大量带有水印图片的情况。无论是电商平台的商品图、社交媒体上的素材&#xff0c;还是企业内部文档&#xff0c;水印的存在…...

新型电力系统数据底座选型:源网荷储四侧时序数据库实战应用

文章目录 一、新型电力系统到底哪里变了&#xff1f;二、电力新业态带来的数字化挑战首先是采集数据的挑战其次是关于实时性的挑战最后是关于计算复杂度的挑战 三、新需求下传统架构已显疲态数据存储割裂实时计算与离线分析的割裂计算引擎分散&#xff0c;维护成本高规则变化时…...

MusePublic圣光艺苑惊艳案例:基于真实建筑数据生成文艺复兴城市图景

MusePublic圣光艺苑惊艳案例&#xff1a;基于真实建筑数据生成文艺复兴城市图景 1. 引言&#xff1a;当古典建筑遇见AI画笔 想象一下&#xff0c;你手头有一份欧洲某座历史名城的建筑测绘数据&#xff0c;里面记录了数百座教堂、广场和宫殿的精确尺寸与风格特征。过去&#x…...

GitHub Desktop汉化终极指南:如何让英文界面瞬间变成中文

GitHub Desktop汉化终极指南&#xff1a;如何让英文界面瞬间变成中文 【免费下载链接】GitHubDesktop2Chinese GithubDesktop语言本地化(汉化)工具 项目地址: https://gitcode.com/gh_mirrors/gi/GitHubDesktop2Chinese 还在为GitHub Desktop的英文界面而头疼吗&#xf…...

gemma-3-12b-it实际作品:10张不同领域测试图的图文理解准确率统计表

gemma-3-12b-it实际作品&#xff1a;10张不同领域测试图的图文理解准确率统计表 1. 测试背景与方法 最近我在实际使用gemma-3-12b-it模型时&#xff0c;对其图文理解能力产生了浓厚兴趣。这个由Google推出的多模态模型号称能够同时处理文本和图像输入&#xff0c;并生成准确的…...