python中魔术方法有哪些
发表于:2025-02-08 作者:千家信息网编辑
千家信息网最后更新 2025年02月08日,这篇文章给大家介绍python中魔术方法有哪些,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。魔术方法清单基本方法__new__(cls,*args,kwargs)创建实例首先调用
千家信息网最后更新 2025年02月08日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安全错误
数据库的锁怎样保障安全
河北it软件开发制作
网络安全的主要因素ppt
科技金融和互联网金融哪个好
南京小型软件开发
全球网络安全信息
数据库字段只能为字母
互联网数据库的组成
大一网络安全导论课程总结
16k纸网络安全手抄报
云服务器免费一年
西安先通网络技术学校
免费代理服务器https
doc 链接数据库
内网穿透的端口只能作服务器吗
steam美国服务器
软件开发的操作使用
天津科技互联网公司有哪些
腾讯云数据库 外网地址
联通服务器最快ip地址
又拍云网络安全监测
数据库防止计算错误
网络安全 推荐
菜刀服务器
免费代理服务器https
网络安全大神道哥 知乎
思维跳跃网络技术有限公司
永州市青少年网络安全教育平台
乔顿集团怎么找软件开发
搭建中转服务器
开展网络安全专项检查报告