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

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 用于初始化对象的属性和状态 当创建一个对象时&#xff0c;Python会自动调用该对象的__init__方法。 这个方法用于初始化对象的属性和状态&#xff0c;是对象创建过程中的一个重要环节 2、new # 通常我们不需要重写__new__方法&#xff0c;除非我们正在进行一些非常…...

python实现贪吃蛇小游戏(附源码)

文章目录 导入所需的模块坐标主游戏循环模块得分 贪吃蛇小游戏&#xff0c;那个曾经陪伴着00后和90后度过无数欢笑时光的熟悉身影&#xff0c;仿佛是一把打开时光之门的钥匙。它不仅是游戏世界的经典之一&#xff0c;更是我们童年岁月中不可或缺的一部分&#xff0c;一个承载回…...

爬虫学习笔记-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是一款命令行工具&#xff0c;用于显示Linux系统中网络的状态信息&#xff0c;可以显示网络连接、路由表、连接的数据统计等信息。 使用 选项 -a&#xff1a;显示所有选项&#xff0c;包括监听和未监听的端口。 -t&#xff1a;仅显示tc…...

VxTerm:C++ MFC,在工具栏中增加Edit/ComboBox等组件,打造一个地址栏/搜索栏功能

VxTerm软件可以在本站链接下载&#xff1a;唯一国产化SSH工具下载&#xff0c;单文件纯绿色不需要安装&#xff0c;替代SecureCRT 在软件的主界面中&#xff0c;增加了一个地址栏功能。 本人的文章内容都是经本人亲自实现并验证成功的干货&#xff0c;关注我&#xff0c;互相交…...

【Android】屏幕锁

屏幕锁&#xff0c;就是锁住屏幕不让用户误触摸&#xff0c;从开发者的角度看就是不响应用户的点击事件。 屏幕锁界面 可以自己创建一个布局文件&#xff0c;或者直接创建一个View&#xff08;例如ImageView&#xff09;。 参数LayoutParams mLayoutParams new LayoutParam…...

springCloud gateway 防止XSS漏洞

springCloud gateway 防止XSS漏洞 一.XSS(跨站脚本)漏洞详解1.XSS的原理和分类2.XSS漏洞的危害3.XSS的防御 二.Java开发中防范XSS跨站脚本攻击的思路三.相关代码&#xff08;适用于spring cloud gateway&#xff09;1.CacheBodyGlobalFilter.java2.XssRequestGlobalFilter.java…...

美赛摘要写作重点

摘要是论文最重要的部分。竞赛要求每篇论文的首页为摘要页&#xff0c;如果摘要写得不好&#xff0c;即使有好的模型和解答&#xff0c;论文也将难以通过鉴别阶段的初审而进入下一阶段。 根据MCM的竞赛规则&#xff0c;摘要应该包含以下内容&#xff1a; 赛题重述与阐明&#…...

RUST笔记: 动态链接库的创建和使用

生成动态链接库 // https://github.com/vvvm23/funny-shapes # 项目元信息 [package] name "funnyshapes" # 项目名称 version "0.1.0" # 版本号 edition "2021" # Rust语言版本# 更多配置信息可查阅&#xff1…...

「阿里云」幻兽帕鲁个人服务器已上线,3分钟快速搭建

基于阿里云搭建幻兽帕鲁服务器方法&#xff0c;1到2分钟部署完成&#xff0c;稳定运行无卡顿&#xff0c;阿里云服务器网aliyunfuwuqi.com分享保姆级手把手教程&#xff0c;基于阿里云计算巢、云服务器或无影云桌面都可以&#xff1a; 基于阿里云幻兽帕鲁服务器创建教程 基于…...

@ 代码随想录算法训练营第6周(C语言)|Day36(贪心)

代码随想录算法训练营第6周&#xff08;C语言&#xff09;|Day36&#xff08;贪心&#xff09; Day36、贪心&#xff08;包含题目 ● 435. 无重叠区间 ● 763.划分字母区间 ● 56. 合并区间 &#xff09; 435. 无重叠区间 题目描述 给定一个区间的集合&#xff0c;找到需要…...

数组打印杨辉三角

签名&#xff1a;但行好事&#xff0c;莫问前程。 文章目录 前言一、杨辉三角的概念二、二维数组打印杨辉三角1、创建二维数组2、使用for循环&#xff0c;初始化外层元素3、给数组赋值3.1给数组每行首末元素赋值为13.1给数组每行非首末元素赋值 三、杨辉三角全代码总结 前言 记…...

【操作系统·考研】文件系统

1.概述 文件系统(File System)提供高效和便捷的磁盘访问&#xff0c;以便允许存储、定位、提取数据。 严格来说&#xff0c;VFS并不是一种实际的FS&#xff0c;它只存在于内存中&#xff0c;不存在与任何外存空间中。 VFS在系统启动时建立&#xff0c;在系统关闭时消亡。 2.结…...

中国传媒网CEO徐晓艺荣膺第九届金鸥奖“2023年度最佳创新人物”殊荣

2023年是不平凡的一年,风云变幻。大国经济有韧性,离不开顶层设计、宏观政策的指挥,也离不开千百万求新求变的企业和企业家们的辛勤耕耘。在经历了三年疫情严峻考验的当下,中国号巨轮迎风搏浪心如磐石,无惧险阻屹立潮头,这不仅是中国红的底色,也是中国企业家的坚守和倔强。2023年…...

ElementUI Form:Switch 开关

ElementUI安装与使用指南 Switch 开关 点击下载learnelementuispringboot项目源码 效果图 el-switch.vue &#xff08;Switch 开关&#xff09;页面效果图 项目里el-switch.vue代码 <script> export default {name: el_switch,data() {return {value: true,value1: …...

通俗易懂理解注意力机制(Attention Mechanism)

重要说明&#xff1a;本文从网上资料整理而来&#xff0c;仅记录博主学习相关知识点的过程&#xff0c;侵删。 一、参考资料 大话注意力机制&#xff08;Attention Mechanism&#xff09; 注意力机制(Attention Mechanism) 深度学习中的注意力机制 注意力机制 二、注意力…...

git的分支的使用,创建分支,合并分支,删除分支,合并冲突,分支管理策略,bug分支,强制删除分支

GIT | 分支 文章目录 GIT | 分支创建分支合并分支删除分支合并冲突分支管理策略bug分支强制删除分支 创建分支 查看当前本地仓库中有哪些分支 git branchHEAD所指向的分支就是当前正在工作的分支 cat .git/HEAD创建一个分支 git branch dev创建好了&#xff0c;但是目前还是…...

【leetcode100-081到090】【动态规划】一维五题合集1

【爬楼梯】 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 思路&#xff1a; 【状态】 dp[i];//爬i级台阶有几种方法 【初始】 dp[0] 1;//爬0级1种&#xff08;不爬&#xff09;dp[1] 1;/…...

数据结构-顺序表详解专题

目录 顺序表 1.简单了解顺序表 2.顺序表的分类 2.1静态顺序表 2.2动态顺序表 2.3typedef命名作用 3.动态顺序表的实现 SeqList.h SeqList.c test.c 顺序表 1.简单了解顺序表 顺序表是线性表的一种&#xff0c;线性表是在逻辑上是线性结构&#xff0c;在物理逻辑上并…...

对商业知识和思维的一些小体会

用途&#xff1a;个人学习笔录&#xff0c;欢迎指正 前言&#xff1a; 小生拙见&#xff0c;我认为商业知识和商业思维的理解对于每一个行业都有潜在的帮助&#xff0c;因为每个人的生活都离不开商业&#xff0c;生意、工作都是交换&#xff0c;用自身提供的价值换取薪酬。因此…...

TEdit终极指南:如何用免费地图编辑器10倍提升泰拉瑞亚创作效率

TEdit终极指南&#xff1a;如何用免费地图编辑器10倍提升泰拉瑞亚创作效率 【免费下载链接】Terraria-Map-Editor TEdit - Terraria Map Editor - TEdit is a stand alone, open source map editor for Terraria. It lets you edit maps just like (almost) paint! It also let…...

如何用Steam Achievement Manager掌控游戏成就?解锁7大实用技巧

如何用Steam Achievement Manager掌控游戏成就&#xff1f;解锁7大实用技巧 【免费下载链接】SteamAchievementManager A manager for game achievements in Steam. 项目地址: https://gitcode.com/gh_mirrors/st/SteamAchievementManager 在游戏世界中&#xff0c;成就…...

bilibili-downloader完全指南:从入门到精通的4个关键步骤

bilibili-downloader完全指南&#xff1a;从入门到精通的4个关键步骤 【免费下载链接】bilibili-downloader B站视频下载&#xff0c;支持下载大会员清晰度4K&#xff0c;持续更新中 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-downloader 一、痛点分析&am…...

douyin-downloader:3大核心能力破解抖音内容高效下载难题

douyin-downloader&#xff1a;3大核心能力破解抖音内容高效下载难题 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback su…...

仙侠H5手游【九州封魔劫代金券内购版】服务端图文搭建教程(含资源下载+部署过程)

游戏截图搭建环境信息 系统&#xff1a;Centos 7.6 内存&#xff1a;4G 处理器&#xff1a;2核 注意事项 复制代码需要通过浏览器打开文章才不会报错 搭建资源获取 百度网盘&#xff1a;https://pan.baidu.com/s/1wmz7RegQGBaNrYYVbuJqgg?pwdkdn4 解压密码&#xff1a;www.won…...

告别手动操作!Open-AutoGLM让iPhone听懂人话,自动执行指令

告别手动操作&#xff01;Open-AutoGLM让iPhone听懂人话&#xff0c;自动执行指令 1. 引言 你是否厌倦了每天重复点击手机屏幕的操作&#xff1f;是否希望手机能像真人助理一样理解你的需求并自动完成任务&#xff1f;今天我要介绍的Open-AutoGLM正是这样一个革命性的AI手机智…...

3分钟快速上手AdGuard浏览器扩展:开源广告拦截工具全平台安装指南

3分钟快速上手AdGuard浏览器扩展&#xff1a;开源广告拦截工具全平台安装指南 【免费下载链接】AdguardBrowserExtension AdGuard browser extension 项目地址: https://gitcode.com/gh_mirrors/ad/AdguardBrowserExtension AdGuard浏览器扩展是一款开源、免费的广告拦截…...

Pixel Aurora Engine效果展示:像素极光视觉系统渲染的星际战舰系列

Pixel Aurora Engine效果展示&#xff1a;像素极光视觉系统渲染的星际战舰系列 1. 像素极光引擎简介 Pixel Aurora Engine是一款基于AI扩散模型的高端绘图工作站&#xff0c;专为像素艺术创作而设计。它采用独特的复古像素游戏风格界面&#xff0c;通过先进的AI技术将文字描述…...

OPENIPC[ssc338Q+hi3536dv100]开源图传----硬件选型与实战避坑指南

1. 开源图传系统硬件选型逻辑 第一次接触OPENIPC开源图传时&#xff0c;我和大多数新手一样被各种专业术语搞得头晕眼花。经过三个月的实际搭建和测试&#xff0c;终于摸清了硬件选型的门道。这里分享的不仅是参数对比&#xff0c;更是我踩过坑后总结的实战经验。 核心硬件架构…...

小米智能家居与Home Assistant深度整合方案

小米智能家居与Home Assistant深度整合方案 【免费下载链接】ha_xiaomi_home Xiaomi Home Integration for Home Assistant 项目地址: https://gitcode.com/GitHub_Trending/ha/ha_xiaomi_home 小米智能家居与Home Assistant的深度整合为用户提供了全面的智能设备控制解…...