python魔法函数[全面]
1、init
用于初始化对象的属性和状态
当创建一个对象时,Python会自动调用该对象的__init__方法。
这个方法用于初始化对象的属性和状态,是对象创建过程中的一个重要环节
2、new
# 通常我们不需要重写__new__方法,除非我们正在进行一些非常特殊的操作,例如单例模式等
class MyClass: def __new__(cls, *args, **kwargs): instance = super(MyClass, cls).__new__(cls) # 在这里进行一些额外的初始化操作 return instance def __init__(self, name): self.name = name
2、del
删除对象时调用的特殊方法
当一个对象不再被引用时,Python会自动调用该对象的__del__方法。
这个方法通常用于释放对象所占用的资源,例如关闭文件、断开网络连接等
class MyClass: def __init__(self): self.file = open("example.txt", "r") def __del__(self): self.file.close() obj = MyClass() # 使用obj读取文件内容... del obj # 删除obj时,会自动调用__del__方法关闭文件
3、setitem
允许对象使用索引运算符 [] 进行赋值
设置对象的指定索引位置的值。
当使用索引赋值操作符 [key] = value 时,Python会自动调用该对象的__setitem__方法。
这个方法允许你自定义对象中索引位置的值被设置时的行为。
参数:
key (类型): 索引位置的键或标识符。
value (类型): 要设置的值。
class MyList: def __init__(self): self.data = [] def __setitem__(self, key, value): if key < 0 or key >= len(self.data): raise IndexError("Index out of range") self.data[key] = value my_list = MyList() my_list[0] = "apple" # 调用__setitem__方法设置索引0处的值为"apple"
4、getitem
获取对象的指定索引位置的值。
当使用索引取值操作符 value = [key] 时,Python会自动调用该对象的__getitem__方法。
这个方法允许你自定义对象中索引位置的值被获取时的行为。
参数:
key (类型): 索引位置的键或标识符。
返回值:
返回指定索引位置的值
class MyList: def __init__(self): self.data = [1, 2, 3, 4, 5] def __getitem__(self, key): if key < 0 or key >= len(self.data): raise IndexError("Index out of range") return self.data[key] my_list = MyList() value = my_list[2] # 调用__getitem__方法获取索引2处的值,返回3
delitem
class MyDictionary: def __init__(self): self.data = {"a": 1, "b": 2, "c": 3} def __delitem__(self, key): if key in self.data: del self.data[key] dictionary = MyDictionary()
del dictionary["b"] # 调用__delitem__方法,删除键为"b"的项
print(dictionary.data) # 输出{"a": 1, "c": 3}
5、setattr
设置对象的属性值。
当使用赋值语句 object.attribute = value 时,Python会自动调用该对象的__setattr__方法。
这个方法允许你自定义对象属性被设置时的行为。
参数:
name (str): 属性的名称。
value (类型): 要设置的值
class MyClass: def __init__(self): pass def __setattr__(self, name, value): if name == "secret_value": raise AttributeError("Cannot set the 'secret_value' attribute") object.__setattr__(self, name, value) obj = MyClass()
obj.name = "Alice" # 正常设置属性name的值
obj.secret_value = "123" # 引发AttributeError异常,因为不允许设置secret_value属性
6、getattr
class MyClass: def __init__(self): self.name = "Alice" def __getattr__(self, name): if name == "age": return 25 # 返回年龄属性值 raise AttributeError("Attribute not found") obj = MyClass()
value = obj.name # 正常获取属性name的值,返回"Alice"
value = obj.age # 调用__getattr__方法获取不存在的属性age的值,返回25
value = obj.address # 引发AttributeError异常,因为找不到属性address
7、str
返回对象的字符串表示形式
class Person: def __init__(self, name, age): self.name = name self.age = age def __str__(self): return f"Name: {self.name}, Age: {self.age}" person = Person("Alice", 25)
print(person) # 调用__str__方法,输出"Name: Alice, Age: 25"
print(str(person)) # 调用__str__方法,输出"Name: Alice, Age: 25"
8、repr
返回对象的官方字符串表示形式
class Person: def __init__(self, name, age): self.name = name self.age = age def __repr__(self): return f"Person('{self.name}', {self.age})" person = Person("Alice", 25)
print(person) # 输出"Person('Alice', 25)"
print(repr(person)) # 输出"Person('Alice', 25)"
9、len
返回对象的长度或包含的元素个数
class MyCollection: def __init__(self): self.items = [] def add(self, item): self.items.append(item) def __len__(self): return len(self.items) collection = MyCollection()
collection.add("apple")
collection.add("banana")
print(len(collection)) # 调用__len__方法,输出2
10、iter
通过定义__iter__方法,你可以自定义对象作为迭代器的行为。这在实现可迭代对象时非常有用,例如列表、元组、字典等内置类型都重写了__iter__方法来返回迭代器。需要注意的是,__iter__方法的返回值应该是一个迭代器对象,该迭代器对象能够逐个返回对象的元素
class MySequence: def __init__(self): self.items = [1, 2, 3] def __iter__(self): return iter(self.items) sequence = MySequence()
for item in sequence: print(item) # 输出1、2、3
11、next
通过定义__next__方法,你可以自定义对象作为迭代器的下一个值的返回。这与__iter__方法一起使用,使得对象能够作为迭代器来遍历元素的序列。需要注意的是,__next__方法的返回值应该表示迭代器的下一个值,并且应该与迭代器的类型和状态保持一致
class MySequence: def __init__(self): self.items = [1, 2, 3] def __iter__(self): return self def __next__(self): item = self.items.pop(0) return item sequence = MySequence()
for item in sequence: print(item) # 输出1、2、3
12、call
允许一个对象像函数一样被调用
# 允许和函数一样调用
class MyFunction: def __init__(self, value): self.value = value def __call__(self, increment): self.value += increment return self.value func = MyFunction(5)
print(func(3)) # 调用__call__方法,输出8
13、add()、sub()、mul()
用于定义对象之间的加、减、乘等运算行为
class MyNumber: def __init__(self, value): self.value = value def __add__(self, other): result = self.value + other.value if isinstance(other, MyNumber) else other return MyNumber(result) num1 = MyNumber(5)
num2 = MyNumber(3)
result = num1 + num2 # 调用__add__方法,输出8
14、eq()、ne()、lt()
用于定义对象之间的比较行为
# __eq__()
class MyClass: def __init__(self, value): self.value = value def __eq__(self, other): if isinstance(other, MyClass): return self.value == other.value return False obj1 = MyClass(5)
obj2 = MyClass(5)
result = obj1 == obj2 # 调用__eq__方法,输出True# __ne__()
class MyClass: def __init__(self, value): self.value = value def __ne__(self, other): if isinstance(other, MyClass): return self.value != other.value return True obj1 = MyClass(5)
obj2 = MyClass(5)
result = obj1 != obj2 # 调用__ne__方法,输出False
【Linux】三剑客详解
【Shell编程】-基础(一)
【shell编程】父子shell和特殊变量
【shell编程】-条件判断
【shell编程】特殊命令用法
相关文章:
python魔法函数[全面]
1、init 用于初始化对象的属性和状态 当创建一个对象时,Python会自动调用该对象的__init__方法。 这个方法用于初始化对象的属性和状态,是对象创建过程中的一个重要环节 2、new # 通常我们不需要重写__new__方法,除非我们正在进行一些非常…...
python实现贪吃蛇小游戏(附源码)
文章目录 导入所需的模块坐标主游戏循环模块得分 贪吃蛇小游戏,那个曾经陪伴着00后和90后度过无数欢笑时光的熟悉身影,仿佛是一把打开时光之门的钥匙。它不仅是游戏世界的经典之一,更是我们童年岁月中不可或缺的一部分,一个承载回…...
爬虫学习笔记-Cookie登录古诗文网
1.导包请求 import requests 2.获取古诗文网登录接口 url https://so.gushiwen.cn/user/login.aspxfromhttp%3a%2f%2fso.gushiwen.cn%2fuser%2fcollect.aspx # 请求头 headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like …...
Linux网络状态查看与防火墙管理
网络状态查看 netstat [选项] Netstat是一款命令行工具,用于显示Linux系统中网络的状态信息,可以显示网络连接、路由表、连接的数据统计等信息。 使用 选项 -a:显示所有选项,包括监听和未监听的端口。 -t:仅显示tc…...
VxTerm:C++ MFC,在工具栏中增加Edit/ComboBox等组件,打造一个地址栏/搜索栏功能
VxTerm软件可以在本站链接下载:唯一国产化SSH工具下载,单文件纯绿色不需要安装,替代SecureCRT 在软件的主界面中,增加了一个地址栏功能。 本人的文章内容都是经本人亲自实现并验证成功的干货,关注我,互相交…...
【Android】屏幕锁
屏幕锁,就是锁住屏幕不让用户误触摸,从开发者的角度看就是不响应用户的点击事件。 屏幕锁界面 可以自己创建一个布局文件,或者直接创建一个View(例如ImageView)。 参数LayoutParams mLayoutParams new LayoutParam…...
springCloud gateway 防止XSS漏洞
springCloud gateway 防止XSS漏洞 一.XSS(跨站脚本)漏洞详解1.XSS的原理和分类2.XSS漏洞的危害3.XSS的防御 二.Java开发中防范XSS跨站脚本攻击的思路三.相关代码(适用于spring cloud gateway)1.CacheBodyGlobalFilter.java2.XssRequestGlobalFilter.java…...
美赛摘要写作重点
摘要是论文最重要的部分。竞赛要求每篇论文的首页为摘要页,如果摘要写得不好,即使有好的模型和解答,论文也将难以通过鉴别阶段的初审而进入下一阶段。 根据MCM的竞赛规则,摘要应该包含以下内容: 赛题重述与阐明&#…...
RUST笔记: 动态链接库的创建和使用
生成动态链接库 // https://github.com/vvvm23/funny-shapes # 项目元信息 [package] name "funnyshapes" # 项目名称 version "0.1.0" # 版本号 edition "2021" # Rust语言版本# 更多配置信息可查阅࿱…...
「阿里云」幻兽帕鲁个人服务器已上线,3分钟快速搭建
基于阿里云搭建幻兽帕鲁服务器方法,1到2分钟部署完成,稳定运行无卡顿,阿里云服务器网aliyunfuwuqi.com分享保姆级手把手教程,基于阿里云计算巢、云服务器或无影云桌面都可以: 基于阿里云幻兽帕鲁服务器创建教程 基于…...
@ 代码随想录算法训练营第6周(C语言)|Day36(贪心)
代码随想录算法训练营第6周(C语言)|Day36(贪心) Day36、贪心(包含题目 ● 435. 无重叠区间 ● 763.划分字母区间 ● 56. 合并区间 ) 435. 无重叠区间 题目描述 给定一个区间的集合,找到需要…...
数组打印杨辉三角
签名:但行好事,莫问前程。 文章目录 前言一、杨辉三角的概念二、二维数组打印杨辉三角1、创建二维数组2、使用for循环,初始化外层元素3、给数组赋值3.1给数组每行首末元素赋值为13.1给数组每行非首末元素赋值 三、杨辉三角全代码总结 前言 记…...
【操作系统·考研】文件系统
1.概述 文件系统(File System)提供高效和便捷的磁盘访问,以便允许存储、定位、提取数据。 严格来说,VFS并不是一种实际的FS,它只存在于内存中,不存在与任何外存空间中。 VFS在系统启动时建立,在系统关闭时消亡。 2.结…...
中国传媒网CEO徐晓艺荣膺第九届金鸥奖“2023年度最佳创新人物”殊荣
2023年是不平凡的一年,风云变幻。大国经济有韧性,离不开顶层设计、宏观政策的指挥,也离不开千百万求新求变的企业和企业家们的辛勤耕耘。在经历了三年疫情严峻考验的当下,中国号巨轮迎风搏浪心如磐石,无惧险阻屹立潮头,这不仅是中国红的底色,也是中国企业家的坚守和倔强。2023年…...
ElementUI Form:Switch 开关
ElementUI安装与使用指南 Switch 开关 点击下载learnelementuispringboot项目源码 效果图 el-switch.vue (Switch 开关)页面效果图 项目里el-switch.vue代码 <script> export default {name: el_switch,data() {return {value: true,value1: …...
通俗易懂理解注意力机制(Attention Mechanism)
重要说明:本文从网上资料整理而来,仅记录博主学习相关知识点的过程,侵删。 一、参考资料 大话注意力机制(Attention Mechanism) 注意力机制(Attention Mechanism) 深度学习中的注意力机制 注意力机制 二、注意力…...
git的分支的使用,创建分支,合并分支,删除分支,合并冲突,分支管理策略,bug分支,强制删除分支
GIT | 分支 文章目录 GIT | 分支创建分支合并分支删除分支合并冲突分支管理策略bug分支强制删除分支 创建分支 查看当前本地仓库中有哪些分支 git branchHEAD所指向的分支就是当前正在工作的分支 cat .git/HEAD创建一个分支 git branch dev创建好了,但是目前还是…...
【leetcode100-081到090】【动态规划】一维五题合集1
【爬楼梯】 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 思路: 【状态】 dp[i];//爬i级台阶有几种方法 【初始】 dp[0] 1;//爬0级1种(不爬)dp[1] 1;/…...
数据结构-顺序表详解专题
目录 顺序表 1.简单了解顺序表 2.顺序表的分类 2.1静态顺序表 2.2动态顺序表 2.3typedef命名作用 3.动态顺序表的实现 SeqList.h SeqList.c test.c 顺序表 1.简单了解顺序表 顺序表是线性表的一种,线性表是在逻辑上是线性结构,在物理逻辑上并…...
对商业知识和思维的一些小体会
用途:个人学习笔录,欢迎指正 前言: 小生拙见,我认为商业知识和商业思维的理解对于每一个行业都有潜在的帮助,因为每个人的生活都离不开商业,生意、工作都是交换,用自身提供的价值换取薪酬。因此…...
5个关键技巧:用ProperTree轻松管理macOS配置文件
5个关键技巧:用ProperTree轻松管理macOS配置文件 【免费下载链接】ProperTree Cross platform GUI plist editor written in python. 项目地址: https://gitcode.com/gh_mirrors/pr/ProperTree ProperTree是一款基于Python开发的跨平台GUI Plist编辑器&#…...
EGO-Planner-v2:零配置开启无人机集群仿真新体验
EGO-Planner-v2:零配置开启无人机集群仿真新体验 【免费下载链接】EGO-Planner-v2 Swarm Playground, the codebase of the paper "Swarm of micro flying robots in the wild" 项目地址: https://gitcode.com/gh_mirrors/eg/EGO-Planner-v2 想要快…...
跨平台Unity游戏资源编辑利器:UABEA深度解析
跨平台Unity游戏资源编辑利器:UABEA深度解析 【免费下载链接】UABEA c# uabe for newer versions of unity 项目地址: https://gitcode.com/gh_mirrors/ua/UABEA 在游戏开发与模组制作领域,Unity引擎的资源文件编辑一直是个技术门槛较高的任务。传…...
spring源码bean生命周期篇 五 如何解决循环依赖
一.spring循环依赖 1. 什么是循环依赖? bean的生命周期前面的章节我们有讲解过大量的源码,我们粗略的分为这几步 spring扫描class获取BeanDefintionspring根据BeanDefintion实例化bean创建bean之前需要实例化对象,实例化后填充原始对象中的属…...
MakeMeAHanzi终极指南:如何免费获取9000+汉字动画数据
MakeMeAHanzi终极指南:如何免费获取9000汉字动画数据 【免费下载链接】makemeahanzi Free, open-source Chinese character data 项目地址: https://gitcode.com/gh_mirrors/ma/makemeahanzi MakeMeAHanzi是一个完全免费的开源汉字数据宝藏库,为汉…...
Zot存储清理策略终极指南:自动化管理镜像生命周期
Zot存储清理策略终极指南:自动化管理镜像生命周期 【免费下载链接】zot zot - A scale-out production-ready vendor-neutral OCI-native container image/artifact registry (purely based on OCI Distribution Specification) 项目地址: https://gitcode.com/Gi…...
生成式AI初学者本地部署实操指南:从报错诊断到模型运行
1. 这不是又一篇“AI科普文”,而是一份写给真实初学者的实操手记Generative AI: A Beginner’s Viewpoint Part 2——这个标题乍看像课程续集,但如果你正站在ChatGPT第一次弹出对话框的那一刻、刚下载完Stable Diffusion却卡在WebUI启动界面、或对着Jupy…...
RDP Wrapper实用指南:三步解决[not supported]错误的高效方法
RDP Wrapper实用指南:三步解决[not supported]错误的高效方法 【免费下载链接】rdpwrap RDP Wrapper Library 项目地址: https://gitcode.com/gh_mirrors/rd/rdpwrap RDP Wrapper是一款让Windows家庭版支持多用户远程桌面连接的开源工具,但许多用…...
NTC与PTC热敏电阻选型实战:从原理到电路设计的深度解析
1. 项目概述:一次关于温度传感器选型的深度复盘在嵌入式系统、家电控制、电池管理乃至工业自动化领域,温度测量是基础得不能再基础,却又至关重要的一环。选对传感器,项目就成功了一半;选错,后续的校准、补偿…...
工业IoT实战:边缘计算+AI在电机预测性维护中的系统架构设计
前言工业物联网(IIoT)场景下,预测性维护(Predictive Maintenance)是AI技术落地价值最明确的方向之一。本文以杭州沃伦森(WARENSEN)电气的AIESA电机智能安康系统为案例,分析其在边缘计…...
