问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

求大神讲解下PYTHON魔法的到底有什么意义?

发布网友 发布时间:2022-04-07 08:55

我来回答

2个回答

懂视网 时间:2022-04-07 13:16

什么是Python魔法方法

魔法方法就如同它的名字一样神奇,总能在你需要的时候为你提供某种方法来让你的想法实现。魔法方法是指Python内部已经包含的,被双下划线所包围的方法,这些方法在进行特定的操作时会自动被调用,它们是Python面向对象下智慧的结晶。初学者掌握Python的魔法方法也就变得尤为重要了。

为什么要使用Python魔法方法

使用Python的魔法方法可以使Python的自由度变得更高,当不需要重写时魔法方法也可以在规定的默认情况下生效,在需要重写时也可以让使用者根据自己的需求来重写部分方法来达到自己的期待。而且众所周知Python是支持面向对象的语言Python的基本魔法方法就使得Python在面对对象方面做得更好。

魔法方法名

说明

基础魔法方法(较为常用)

__new__(cls[, ...])1.实例化对象时第一个被调用的方法
2.其参数直接传递给__init__方法处理
3.我们一般不会重写该方法
__init__(self[, ...])构造方法,初始化类的时候被调用
__del__(self)析构方法,当实例化对象被彻底销毁时被调用(实例化对象的所有指针都被销毁时被调用)
__call__(self[, args...])允许一个类的实例像函数一样被调用:x(a, b) 调用 x.__call__(a, b)
__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 < y 调用 x.__lt__(y)
__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)定义加法的行为:+
__sub__(self, other)定义减法的行为:-
__mul__(self, other)定义乘法的行为:*
__truediv__(self, other)定义真除法的行为:/
__floordiv__(self, other)定义整数除法的行为://
__mod__(self, other)定义取模算法的行为:%
__divmod__(self, other)定义当被 divmod() 调用时的行为
__pow__(self, other[, modulo])定义当被 power() 调用或 ** 运算时的行为
__lshift__(self, other)定义按位左移位的行为:<<
__rshift__(self, other)定义按位右移位的行为:>>
__and__(self, other)定义按位与操作的行为:&
__xor__(self, other)定义按位异或操作的行为:^
__or__(self, other)定义按位或操作的行为:|
反运算(类似于运算方法)
__radd__(self, other) 当被运算对象(左边的操作对象)不支持该运算时被调用
__rsub__(self, other) 当被运算对象(左边的操作对象)不支持该运算时被调用
__rmul__(self, other) 当被运算对象(左边的操作对象)不支持该运算时被调用
__rtruediv__(self, other) 当被运算对象(左边的操作对象)不支持该运算时被调用
__rfloordiv__(self, other) 当被运算对象(左边的操作对象)不支持该运算时被调用
__rmod__(self, other) 当被运算对象(左边的操作对象)不支持该运算时被调用
__rdivmod__(self, other) 当被运算对象(左边的操作对象)不支持该运算时被调用
__rpow__(self, other) 当被运算对象(左边的操作对象)不支持该运算时被调用
__rlshift__(self, other) 当被运算对象(左边的操作对象)不支持该运算时被调用
__rrshift__(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)定义赋值按位或操作的行为:|=
一元操作符
__neg__(self)定义正号的行为:+x
__pos__(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)定义删除容器中指定元素的行为,相当于 del self[key]
__iter__(self)定义当迭代容器中的元素的行为
__reversed__(self)定义当被 reversed() 调用时的行为
__contains__(self, item)定义当使用成员测试运算符(in 或 not in)时的行为

推荐学习:Python视频教程

热心网友 时间:2022-04-07 10:24

魔法方法是让你自己改的 不改当然没意义了 初学者说追问怎么改?我现在一头雾水,求解

追答

你就写了一个类  没写怎么调用的呀  你

看到了吗  你如果吧 __len__方法改了  你用 len的时候 会自动调用你写的 __len__ 方法 

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
说课包括哪些方面 说课内容包括()。 如何在手机百度上删除对话记录? 结核病是什么样的疾病? 曹丕17岁得了肺痨,明知自己命不长久,还要强争王位,是不是很自私呢?_百... 古代小说常出现的病名 急求一篇"生活小窍门"(500字)的作文 至今最有什么小妙招 健康的戒烟方法 笔记本电池锁死是什么原因引起的? EXCEL中如何统一字符的格式 Auto CAD2008卸载后不能再安装怎么办 不小心把电脑的CAD软件卸载了 怎么办 能重新装回来吗 CAD卸载后,为什么安装不起,怎样才安装的起? 美少女万华镜3的全CG存档怎么用 谁有美少女万华镜的这张大图啊,下了那些cg提取包里都没有啊 求美少女万华镜全部的CG,最好是百度网盘,还可以私信我 广发银行能卡办卡吗 广发信用卡以卡办卡需要什么条件 请问各位jm,薏仁可以用微波炉做么? 办广发信用卡需要什么条件?需要每年付钱吗? 请大家帮我看一下 这个是不是真的? 外币的点钞机,银行外的柜台有吗? 不是只有红豆薏米可以祛除湿气,祛除湿气还可以怎么做? 我有一张广发银行的信用卡,请问可以以卡办卡 中国广发信用卡都是要什么证件可以办 广发信用卡可以以卡办卡吗 把薏仁米做成爆米花,它的营养会流失吗? 广发银行申请信用卡的条件主要有哪几点 验钞机美金和欧元的波长是一样的吗? 双面呢羊绒大衣干洗后变硬怎么办 羊绒大衣穿久了变硬 羊绒大衣水洗为什么变形 我有一件呢子大衣刚买回来的时候蛮硬蛮立体的,送去干洗店后就成软的啦。怎么回事?有什么方法可以把它弄 羊绒大衣干洗后表面的毛有点打结,不像以前那么平整,是洗坏了么? 本田125大概多少钱、 解梦 梦见很多衣架挂在一条线上 请帮忙解释!1 五羊一本田摩托车125一2耐磨吗 床头墙上挂衣服可以吗 梦见女朋有家客厅摆两个衣架啥意思? 衣架放床头好吗 五羊一本田WH125 周公解梦破解,梦见自己睡觉时,床尾站着一个“人”。 梦见衣架挂别人的地方,被人收走熟人过来说叫我买回来,他的有没有在里面? 本田125摩托车最低价格是什么型号的 本田摩托车125多少钱 挂衣架风水有什么讲究 求本田CH125详细资料,什么时候进入中国的。越详细越好。 一个两部手机上信息怎么同步?- 问一问 梦见墙上挂衣架上放了二杯酒还有就去世老人在、墙上齐