目录

魔术方法介绍系列:概述

什么是魔术方法

Python 中我们可以自定义我们需要的类,并实现相关的类的方法。其中,有一种特殊的方法,它们的名称是以双下划线开始,并以双下划线结束,这些类的方法我们称为魔术方法(magic method)。它们有另一个别名,叫做dunder 方法dunder是 “Double Underscores" 的缩写。

魔术方法和普通方法的区别在于,魔术方法一般不会被显示地、主动地调用,而是当对象处在某个特定的场合,自动被调用。

在本人以前一些介绍 Python 的文章中,涉及到一些魔术方法,比如:

C++ 中的运算符重载(operator overloading),用来重构某个运算符作用于对象的行为。Python的魔术方法,和 C++ 的运算符重载类似,但魔术方法使用范围更广,它不仅仅可以重载对象的诸如算数、赋值、关系型等运算符,还可以重载其它行为,比如上面提到的__hash__方法,并不是重载一种运算符,而是重载如何计算对象的散列值;__len__方法也不是重载运算符,而是重载如何计算对象的长度。

 

常用的魔术方法

魔术方法中最常用的方法,莫属于__init__方法。它类似于 C++ 中的构造函数,用于定义如何创建类的对象。其实,Python 中用来构造类的对象,还有另一个方法__new____new__负责创建对象,__init__负责初始化对象,这两个函数加在一起,才相当于 C++ 的构造函数的功能。另外,有构造就有析构,Python 中用来析构对象的方法是__del__,它用来定义当对象被垃圾回收的时候,我们希望它做的事情。

第二类常用的魔术方法,是比较运算符。包括:__cmp____eq____ne____lt____gt____le____ge__等方法,这些方法重构了对象间如何比较大小的逻辑,使得对象可以相互比较从而能用于一些排序方法中。

第三类较为常用的魔术方法,是算数运算符。包括:__add____sub____mul____div____mod____pow__等,这些方法重构了对象间如何用运算符计算的逻辑,实现后,对象可以直接用于一些算术表达式或数学函数进行计算。

第四类魔术方法,是一些类型转换方法。包括:__int____long____float____hex__等,这些方法通常被 Python 内置的类型转换方法调用。比如,当用 float() 函数想把一个对象转换成 float 类型时,会调用该对象的__float__方法。

第五类魔术方法,是关于如何表达对象。包括:__str____repr____hash____format__等,这些方法定义了在一些特定场合如何展现对象的内容或者值。

第六类魔术方法,是关于获取或设置对象属性值的方法。包括:__getattr____setattr____delattr__等。

除了以上类型,还有一些不太常用的魔术方法。具体可以参考 Python 的 data model

本人将在后续文章中,挑选部分常用的魔术方法展开介绍。

 

参考

https://docs.python.org/3/reference/datamodel.html


- 全文完 -

相关文章

「 您的赞赏是激励我创作和分享的最大动力! 」