Python教程

python魔法方法

本文主要是介绍python魔法方法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

python魔法方法

magic method(魔术方法)special method(特殊方法)的非正式同义词 。

一种由 Python 隐式调用的方法,用来对某个类型执行特定操作例如相加等等。这种方法的名称的首尾都为双下划线。特殊方法官方文档https://docs.python.org/zh-cn/3/reference/datamodel.html#specialnames

 

以双下划线 __ 包裹起来的方法,比如最常见的 __init__,这些方法被称为魔法方法(magic method)或特殊方法(special method),这些方法可以给 Python 的类提供特殊功能,方便我们定制一个类。简单地说,魔法方法是指Python内部已经包含的,被双下划线所包裹的方法,它们是一些可以让你对类添加“魔法”的特殊方法。如 __init__()、__str__()、__new__()、__unicode__()、__call__()几种。

 

Python一切皆对象,比如字面量123、“abc”也是对象,可以通过dir()来查看对象所拥有的特殊方法,如dir(123),参见下图:

 

对于内置的对象来说(比如整数、表、字符串等),Python为之准备好了一些特殊方法(special method),特殊方法又被成为魔法方法(magic method)。下面给出几个例子,感性认识一下。

Python的运算符是通过调用对象的特殊方法实现的。比如:

'abc' + 'xyz' 

实际执行了如下操作:

'abc'.__add__('xyz')

参见下图:

所以,在Python中,两个对象是否能进行加法运算,首先就要看相应的对象是否有__add__()方法。一旦相应的对象有__add__()方法,即使这个对象从数学上不可加,我们都可以用加法的形式,来表达obj.__add__()所定义的操作。在Python中,运算符起到简化书写的功能,但它依靠特殊方法实现。

 

与运算符类似,许多内置函数也都是调用对象的特殊方法。比如

len([1,2,3])

实际上做的是

[1,2,3].__len__()

参见下图:

 

下面是我们常见的列表元素引用方式

li = [1, 2, 3, 4, 5, 6]

li[3]

实际上做的是调用

li.__getitem__(3)

参见下图:

 

待续

这篇关于python魔法方法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!