python中魔术方法有哪些
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,这篇文章给大家介绍python中魔术方法有哪些,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。魔术方法清单基本方法__new__(cls,*args,kwargs)创建实例首先调用
千家信息网最后更新 2025年12月02日python中魔术方法有哪些
这篇文章给大家介绍python中魔术方法有哪些,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
魔术方法清单
| 基本方法 | |
|---|---|
| __new__(cls,*args,kwargs) | 创建实例首先调用的类方法,cls指代本类。注意*args和kwargs的写法,如果不这样写会造成__init__方法会接收不到参数 |
| __init__(self[,…]) | 构造器,创建实例的方法 |
| __del__(self) | 析构器,销毁实例的方法 |
| __call__(self[,args…]) | 允许实例像函数一样被调用,即运行"实例()"时实质是调用实例的__call__方法 |
| __len__(self) | 定义当被len()调用时的方法 |
| __repr__(self) | 定义当被repr()调用时的方法 |
| __str__(self) | 定义当被str()调用时的方法 |
| __bytes__(self) | 定义当被bytes()调用时的方法 |
| __hash__(self) | 定义当被hash()调用时的方法 |
| __bool__(self) | 定义当被bool()调用时的方法,必须返回True或False |
| __format__(self,format_spec) | 定义当被format()调用时的方法 |
| 属性方法 | |
| __getattr__(self,name) | 定义访问不存在的属性时的方法 |
| __getattribute__(self,name) | 定义访问指定属性时的方法 |
| __setattr__(self,name,value) | 定义修改指定属性时的方法 |
| __delattr__(self,name) | 定义删除指定属性时的方法 |
| __dir__(self) | 定义被dir()调用时的方法 |
| __get__(self,instance,owner) | 定义当描述符的值被取得时的方法 |
| __set__(self,instance,value) | 定义当描述符的值被改变时的方法 |
| __delete__(self,instance) | 定义当描述符的值被删除时的方法 |
| 比较操作符 | |
| __lt__(self,other) | 定义小于号的方法:x |
| __le__(self,other) | 定义小于等于号的方法:x<=y调用x.__le__(y) |
| __eq__(self,other) | 定义等于号的方法:x==y调用x.__eq__(y) |
| __ne__(self,other) | 定义不等号的方法:x!=y调用x.__ne__(y) |
| __gt__(self,other) | 定义大于号的方法:x>y调用x.__gt__(y) |
| __ge__(self,other) | 定义大于等于号的方法:x>=y调用x.__ge__(y) |
| 算数运算符 | |
| __add__(self,other) | 定义加法的方法:+。例如x+y,实质是找x的__add__方法;如果找到则执行x.__add__(y);如果x没有__add__方法,则会找y的__radd__方法;如果y也没有__radd__方法则会报错。 |
| __sub__(self,other) | 定义减法的方法:- |
| __mul__(self,other) | 定义乘法的方法:* |
| __truediv__(self,other) | 定义真除法的方法:/,这个函数只有使用from__future__importdivision时才有作用。 |
| __div__(self,other) | 定义除法的方法:/ |
| __floordiv__(self,other) | 定义除法取整的方法:// |
| __mod__(self,other) | 定义除法取余的方法:% |
| __divmod__(self,other) | 定义被divmod()调用时的方法。divmod就是除法,返回的值是元组,元组有2项内容,第一项是除法取整的结果,第二项是除法取余的结果。 |
| __pow__(self,other[,modulo]) | 定义当被power()调用或**运算时的方法 |
| __lshift__(self,other) | 定义按位左移位的方法:<< |
| __rshift__(self,other) | 定义按位右移位的方法:>> |
| __and__(self,other) | 定义按位与操作的方法:& |
| __xor__(self,other) | 定义按位异或操作的方法:^ |
| __or__(self,other) | 定义按位或操作的方法:| |
| 右算术运算符 | |
| __radd__(self,other) | 与上方算术运算符相同,当左操作数不能调用算术运算符时右操作数会调用的方法,例如:x+y,当x没有__add__方法时,会尝试调用y的__radd__方法,即执行y.__radd__(y),如果y也没有__radd__则报错。 |
| __rsub__(self,other) | 同上 |
| __rmul__(self,other) | 同上 |
| __rtruediv__(self,other)同上 | 同上 |
| __rdiv__(self,other) | 同上 |
| __rfloordiv__(self,other) | 同上 |
| __rmod__(self,other) | 同上 |
| __rdivmod__(self,other) | 同上 |
| __rpow__(self,other) | 同上 |
| __rlshift__(self,other) | 同上 |
| __rrshift__(self,other) | 同上 |
| __rand__(self,other) | 同上 |
| __rxor__(self,other) | 同上 |
| __ror__(self,other) | 同上 |
| 增量赋值运算 | |
| __iadd__(self,other) | 定义赋值加法的方法:+= |
| __isub__(self,other) | 定义赋值减法的方法:-= |
| __imul__(self,other) | 定义赋值乘法的方法:*= |
| __itruediv__(self,other) | 定义赋值真除法的方法:/= |
| __ifloordiv__(self,other) | 定义赋值整数除法的方法://= |
| __imod__(self,other) | 定义赋值取模算法的方法:%= |
| __ipow__(self,other[,modulo]) | 定义赋值幂运算的方法:= |
| __ilshift__(self,other) | 定义赋值按位左移位的方法:<<= |
| __irshift__(self,other) | 定义赋值按位右移位的方法:>>= |
| __iand__(self,other) | 定义赋值按位与操作的方法:&= |
| __ixor__(self,other) | 定义赋值按位异或操作的方法:^= |
| __ior__(self,other) | 定义赋值按位或操作的方法:|= |
| 一元操作符 | |
| __pos__(self) | 定义正号的方法:+x |
| __neg__(self) | 定义负号的方法:-x |
| __abs__(self) | 定义当被abs()调用时的方法 |
| __invert__(self) | 定义按位求反的方法:~x |
| 类型转换 | |
| __complex__(self) | 定义当被complex()调用时的方法(需要返回恰当的值) |
| __int__(self) | 定义当被int()调用时的方法(需要返回恰当的值) |
| __float__(self) | 定义当被float()调用时的方法(需要返回恰当的值) |
| __round__(self[,n]) | 定义当被round()调用时的方法(需要返回恰当的值) |
| __index__(self) | 1.当对象是被应用在切片表达式中时,实现整形强制转换2.如果你定义了一个可能在切片时用到的定制的数值型,你应该定义__index__3.如果__index__被定义,则__int__也需要被定义,且返回相同的值 |
| 上下文管理(with语句) | |
| __enter__(self) | 1.定义当使用with语句时的初始化行为2.__enter__的返回值被with语句的目标或者as后的名字绑定 |
| __exit__(self,exc_type,exc_value,traceback) | 1.定义当一个代码块被执行或者终止后上下文管理器应该做什么2.一般被用来处理异常,清除工作或者做一些代码块执行完毕之后的日常工作 |
| 容器类型 | |
| __len__(self) | 定义当被len()调用时的方法(返回容器中元素的个数) |
| __getitem__(self,key) | 定义获取容器中指定元素的方法,相当于self[key] |
| __setitem__(self,key,value) | 定义设置容器中指定元素的方法,相当于self[key]=value |
| __delitem__(self,key) | 定义删除容器中指定元素的方法,相当于delself[key] |
| __iter__(self) | 定义当迭代容器中的元素的方法 |
| __reversed__(self) | 定义当被reversed()调用时的方法 |
| __contains__(self,item) | 定义当使用成员测试运算符(in或notin)时的方法 |
魔术方法讲解
魔术方法之前已经写了两篇文章了,这是最后一篇。难点基本都讲过了,剩下的魔术方法多数是各种运算符,下面写一个关于运算符重载的简单案例
运算符重载
这里写一个关于运算符重载的小案例。
有个士兵对战的游戏,蓝军是特种兵(攻击力30,血量99),红军是老兵(攻击力20,血量80)。
蓝军和红军打肯定是蓝军赢对吧?别急,现在红军领导也想到了,于是给红军老兵配了个护士(攻击力18,血量80),护士攻击力比较低,但她可以给老兵治疗。
class Soldier:def __init__(self, name, attack, health):self.name = name self.attack = attack self.health = healthdef __add__(self, other):other.health += self.attackdef __sub__(self, other):other.health -= self.attackblue = Soldier('蓝兵', 30, 99)red = Soldier('红兵', 20, 80)red_nurse = Soldier('红护', 18, 80)while blue.health > 0 and red.health > 0:red - blue blue - red red_nurse + redprint(f"红军老兵还剩下{red.health}点血量!")print(f"蓝军特种兵血量是{blue.health},已被击毙!")out:红军老兵还剩下20点血量!蓝军特种兵血量是-1,已被击毙!关于python中魔术方法有哪些就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
方法
运算
运算符
除法
魔术
实例
容器
红军
元素
属性
老兵
蓝军
恰当
攻击力
攻击
中指
内容
特种兵
算术
语句
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
华为软件开发对应测试
数据库原理专升本
武汉鸟笼科技互联网
网络安全常识口诀
网络安全的安全教案
网络安全标准与产业
中心管理服务器
为什么在软件开发中需要需求
零基础过三级数据库技术
信息网络安全存在风险
引文数据库没有权限
医院服务器管理系统
应用下载用户数据库
软件开发流程j
网站和app都有服务器吗
数据库服务器如何卸载
河南水果软件开发
软件开发如何做到监督
医院软件开发项目质量保障措施
大数据软件开发怎么样
hp2000服务器更换硬盘配置
网络安全灾难恢复等级
科技互联网基金买什么
软件开发出来由谁维护
武汉力天网络技术
数据库地图化建设实施方案
数据库审计防火墙
sql 语句备份表数据库
电视数据库是什么软件
软件开发自学教程购买教程