在浏览他人的程序代码时常常会遇到 __ xxx __ 类的字符串,对于初学者来说既看不懂语义,也不明白为什么要怎么写,删了有时又会出bug…
在Python中,所有以“__”双下划线包起来的方法,都统称为“Magic Method”,中文称『魔术方法』,包括Python的类的构造函数、特殊属性和特殊方法等等,对此简要说明一下几个常见的。
(一)Python类的构造函数
初始化类是在类内建立一个初始化方法(method),当在程序内定义这个类的对象时将自动执行这个方法。固定名称是“__ init __()” ,写法是在init左右皆是2个底线字符,init全称是initialization,通常又将这类初始化的方法称构造函数(constructor)。
定义Message类的a对象,Message类会自启动 __ init __() 初始化函数,定义中的self 是必需的,且需放在所有参数的最前面,Python在初始化时会自动传入这个参数self,代表的是类本身的对象,其他在类内想要参照各属性与函数执行运算皆要使用self。
print(a)没有正常输出字符串,具体解决方案查看下方 Python的特殊方法里的repr方法
(二)Python的特殊属性
1.文档字符串 __ doc __
文档字符串的英意是 docstring,该属性是为函数或类列出文档的批注(类似于对象的调用)。下图是Python内部有关字符串的docstring
2. __ name __ 属性
常常可以在程序末端看到:
if __ name __ == ‘__ main __’:
其实这是使用 __ name __ 属性来判别程序是自己执行还是被其他程序import导入当成模块使用
若程序是自己执行的 __ name __ 就是 __ main __
(三)Python的特殊方法
1. __ str__() 方法
协助返回易读取的字符串,下例用一个类的调用来说明
在Python Shell窗口直接输入 a也将得到一个不易阅读的结果2. __ repr __ () 方法
上例中若直接输入类变量 a系统是调用 __ repr __() 方法做响应的,为了得到正常的数据输出,需要定义此方法,由于内容相同,可直接用等号取代 __ str __()方法
3. __ iter __ () 方法
在python中实现了__ iter __ 方法的对象是可迭代的,实现了next()方法的对象是迭代器。
实际上要想让一个迭代器工作,至少要实现__ iter __ 方法和next方法。
很多时候使用迭代器完成的工作使用列表也可以完成,但是如果有很多值列表就会占用太多的内存,而且使用迭代器也让我们的程序更加简洁通用。
若一个类想被用于for … in循环,类似list或tuple那样,就必须实现一个__ iter __()方法,该方法返回一个迭代对象,然后,Python的for循环就会不断调用该迭代对象的next()方法拿到循环的下一个值,直到遇到StopIteration错误时退出循环。下例已输出100以内的斐波那契数为例
(四)Python的应用模块
- 1.导入模块
import 模块名称 - 2.导入模块内特定单一函数
from 模块名称 import 函数名称 - 3.导入模块内多个函数
from 模块名称 import 函数名称1,函数名称2,…,函数名称n - 4.导入模块所有函数
from 模块名称 import * - 5.使用as给函数指定替代名称
from 模块名称 import 函数名称 as 替代名称 - 6.使用as给模块指定替代名称
import 模块名称 as 替代名称