百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Python 魔法方法解析(python中魔术方法)

off999 2024-11-15 23:07 28 浏览 0 评论

前言

在Python语言中,一切皆为对象,因此Python是支持面向对象的高级编程语言。在Python面向对象编程特性 一文中,Python语言是支持封装、继承、多态三个特性的。

  • 封装:使用黑盒的方式将对象信息隐藏在内部,外部无法进行访问
  • 继承:子父类概念,将父类称为基类,子类可以继承所有父类的特性,极大地提高代码的复用性
  • 多态:指向同一个方法,不同对象产生行为是不同的。继承和方法重写是多态的两个前提

在创建类的时候,我们总会调用系统以"__"双下换线开头结尾的方法,来对对象进行创建、初始化、销毁等操作,如以下栗子:

class Student:

    def __init__(self,name,age):

        self.name = name
        self.age = age

    def __del__(self):

        print("系统销毁对象{0}".format(self))
复制代码

在上述栗子中,我们都知道__init__()是构造方法、__del__()是析构方法,__new__()创建实例对象,除此之外它们还有一个统一的名称叫做魔法方法。

本期,我们将学习Python中拥有一个很帅气的名称魔法方法,Let's go~~

1. 魔法方法概述

  • 什么叫魔法方法?

在Python中,定义以"__"双下划线开头结尾的方法,行内内部大家都统称为“magic method”。

比如我们常见的构造方法、析构方法都是属于魔法方法中。

在Python官方文档中,魔法方法分布比较分散,并且介绍时也无案例说明,通常晦涩难懂。

  • 魔法方法的特点 魔法方法主要定义类对象的方法,无法直接调用 默认情况,Python解释器会自动调用。特殊情况,可重写该方法。 魔法方法可用于对象初始化、控制属性访问、创建自定义等操作 魔法方法包提供包含如比较、数值计算、单双目运算、类型转换等方法

2. 构造销毁方法

我们上述创建一个Student类,定义一个实例化类StudentA,看看Python解释器内部会分别调用三个魔法方法。

  • __new__():是对象实例化时,首先会调用该方法,创建实例,并把类参数name,age传给__init__()。如果__new__()未返回一个类实例,则__init__()方法将不执行。
  • __init__():在__new__()创建实例后,对实例化参数进行初始化赋值。因为,对象是由__new__() 创建和 __init__() 定制,共同构建完成的,__init__()返回值为None,否则在运行时会引发TypeError.
  • __del__():在实例对象比销毁时被调用。对象被垃圾回收时才会调用该方法,需要注意的是Python解释器退出时,但对象仍然存活的时候,__del__()不会被执行的。如在程序中需要销毁对象,建议尽量手工调用del()方法进行清理。

3. 属性访问方法

Python 魔法方法提供控制属性访问的方法。

  • __getattr__(self,name): 该方法用于访问对象不存在的属性时,会调用定义访问行为。这个方法适合于普通的拼写错误的获取和重定向,对获取不建议的属性时会给出警告或者处理一个AttributteError。
  • __setattr__(self,name,value): 是封装属性,无论属性是否存在,都允许定义对属性的赋值行为,可以对属性的值进行个性化定义。在使用__setattr__(self,name,value)时,需要避免无限递归的错误。
  • __delattr__():与__setattr__(self,name,value)类似,但是不对属性进行赋值而是进行删除。该方法仅在del obj.name 对于对象有意义时才被实现。同样在实现时,需要避免无限循环的错误。

4. 上下文管理器

Python中对文件打开、关闭操作。提供了with 语句,其实质就是运行上下文管理器,由三部分组成。

  • 上下文管理协议
  • 上下文管理器
  • 上下文运行时

以上三部分,其中上下文管理协议是由 __enter__() 和 __exit__() 两个方法相互协作完成的。

  • __enter__():进入运行时上下文并返回此对象关联到该运行时上下文的其他对象上。__enter__()该方法的返回值会绑定到使用上下文管理器with语句的as 子句中的标识符。
  • __exit__(): 退出运行时上下文并返回一个bool标识的异常是否应当被屏蔽。当with语句体重发生异常,则参数会包含异常类型、值和回溯信息,否则三个参数都是None。

5. 对象描述器

python 魔法方法提供了描述器,是可以通过获取、设置以及删除时访问类。

  • 描述器不是独立的,需要被所有者持有,并且存在其字典中
  • 当创建面向对象的数据库或者类,里面包含相互依赖的属性时,描述器将会非常有用的
  • 实现描述器时,一个类至少有__get__()、__set__()、__delete__()方法

__get__(self,instance,owner):定义描述器的值被取得时的行为。instance 是拥有该描述器对象的一个实例。owner 拥有者本身

__set__(self,instance,value): 定义描述器的值被改变时的行为。instance为描述器的一个实例,value要设置的值。

__delete__(self,instance):定义描述器的值被上传时的行为,instance为描述器的一个实例。

6. 其他方法

  • 比较操作符魔法方法:

方法

说明

__cmp__(self,other)

比较方法里最基本的魔法方法

__eq__(self,other)

定义相等符号,==

__ne__(self,other)

定义不等于符号,!=

__lt__(self,other)

定义小于符号,<

__gt__(self,other)

定义大于符号,>

__le__(self,other)

定义小于等于符号,<=

__ge__(self,other)

定义大于等于符号,>=

____(self)


____(self)


  • 单目操作符魔法方法:

方法

说明

__pos__(self)

实现取正操作

__neg__(self)

实现取负操作

__adbs__(self)

实现绝对值操作

__invert__(self)

实现取反操作

__round__(self,n)

实现内建函数

__floor__(self)

实现向下取整

__ceil__(self)

实现向上取整

__trunc__(self)

实现距离零最近的的整数

总结

本期,主要对Python 魔法方法进行详细的学习。在日常工作,我们可以使用Python 魔法方法方便我们快速进行面向对象编程。

以上是本期内容,欢迎大佬们点赞评论,下期见~


作者:盆友圈的小可爱
链接:https://juejin.cn/post/7063686311000948772

相关推荐

安全教育登录入口平台(安全教育登录入口平台官网)

122交通安全教育怎么登录:122交通网的注册方法是首先登录网址http://www.122.cn/,接着打开网页后,点击右上角的“个人登录”;其次进入邮箱注册,然后进入到注册页面,输入相关信息即可完...

大鱼吃小鱼经典版(大鱼吃小鱼经典版(经典版)官方版)

大鱼吃小鱼小鱼吃虾是于谦跟郭麒麟的《我的棒儿呢?》郭德纲说于思洋郭麒麟作诗的相声,最后郭麒麟做了一首,师傅躺在师母身上大鱼吃小鱼小鱼吃虾虾吃水水落石出师傅压师娘师娘压床床压地地动山摇。...

谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
哪个软件可以免费pdf转ppt(免费的pdf转ppt软件哪个好)
哪个软件可以免费pdf转ppt(免费的pdf转ppt软件哪个好)

要想将ppt免费转换为pdf的话,我们建议大家可以下一个那个wps,如果你是会员的话,可以注册为会员,这样的话,在wps里面的话,就可以免费将ppt呢转换为pdfpdf之后呢,我们就可以直接使用,不需要去直接不需要去另外保存,为什么格式转...

2026-02-04 09:03 off999

电信宽带测速官网入口(电信宽带测速官网入口app)

这个网站看看http://www.swok.cn/pcindex.jsp1.登录中国电信网上营业厅,宽带光纤,贴心服务,宽带测速2.下载第三方软件,如360等。进行在线测速进行宽带测速时,尽...

植物大战僵尸95版手机下载(植物大战僵尸95 版下载)

1可以在应用商店或者游戏平台上下载植物大战僵尸95版手机游戏。2下载教程:打开应用商店或者游戏平台,搜索“植物大战僵尸95版”,找到游戏后点击下载按钮,等待下载完成即可安装并开始游戏。3注意:确...

免费下载ppt成品的网站(ppt成品免费下载的网站有哪些)

1、Chuangkit(chuangkit.com)直达地址:chuangkit.com2、Woodo幻灯片(woodo.cn)直达链接:woodo.cn3、OfficePlus(officeplu...

2025世界杯赛程表(2025世界杯在哪个国家)

2022年卡塔尔世界杯赛程公布,全部比赛在卡塔尔境内8座球场举行,2022年,决赛阶段球队全部确定。揭幕战于当地时间11月20日19时进行,由东道主卡塔尔对阵厄瓜多尔,决赛于当地时间12月18日...

下载搜狐视频电视剧(搜狐电视剧下载安装)

搜狐视频APP下载好的视频想要导出到手机相册里方法如下1、打开手机搜狐视频软件,进入搜狐视频后我们点击右上角的“查找”,找到自已喜欢的视频。2、在“浏览器页面搜索”窗口中,输入要下载的视频的名称,然后...

pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
永久免费听歌网站(丫丫音乐网)

可以到《我爱音乐网》《好听音乐网》《一听音乐网》《YYMP3音乐网》还可以到《九天音乐网》永久免费听歌软件有酷狗音乐和天猫精灵,以前要跳舞经常要下载舞曲,我从QQ上找不到舞曲下载就从酷狗音乐上找,大多...

音乐格式转换mp3软件(音乐格式转换器免费版)

有两种方法:方法一在手机上操作:1、进入手机中的文件管理。2、在其中选择“音乐”,将显示出手机中的全部音乐。3、点击“全选”,选中所有音乐文件。4、点击屏幕右下方的省略号图标,在弹出菜单中选择“...

电子书txt下载(免费的最全的小说阅读器)

1.Z-library里面收录了近千万本电子书籍,需求量大。2.苦瓜书盘没有广告,不需要账号注册,使用起来非常简单,直接搜索预览下载即可。3.鸠摩搜书整体风格简洁清晰,书籍资源丰富。4.亚马逊图书书籍...

最好免费观看高清电影(播放免费的最好看的电影)

在目前的网上选择中,IMDb(互联网电影数据库)被认为是最全的电影网站之一。这个网站提供了各种类型的电影和电视节目的海量信息,包括剧情介绍、演员表、评价、评论等。其还提供了有关电影制作背后的详细信息,...

孤单枪手2简体中文版(孤单枪手2简体中文版官方下载)

要将《孤胆枪手2》游戏的征兵秘籍切换为中文,您可以按照以下步骤进行操作:首先,打开游戏设置选项,通常可以在游戏主菜单或游戏内部找到。然后,寻找语言选项或界面选项,点击进入。在语言选项中,选择中文作为游...

取消回复欢迎 发表评论: