2-1 什么是魔法函数
2019-03-10 本文已影响0人
xgnb
魔法函数用于增强我们定义的类对象。
在类对象中,以双下滑线开头以及结尾的成为魔法函数,比如常见的__init__。
我们看一下场景。
quetion:
定义一个名为Company的公式类,构造函数定义一个员工列表,遍历这个员工列表,打印出员工的名字
class Company:
def __init__(self, employee_list):
self.employee = employee_list
# 如果我想遍历公司的员工,通常这样做
company = Company(['tom', 'bob', 'jane'])
employee = company.employee
for em in employee:
print(em)

当我们为这个对象定义一个,名为__getitem__方法的时候,如下定义时:
class Company:
def __init__(self, employee_list):
self.employee = employee_list
def __getitem__(self, item):
return self.employee[item]
company = Company(['tom', 'bob', 'jane'])
for i in company:
print(i)

一样可以达到如上的操作!~
补充:
当我们定义了这个__getitem__的魔法方法时(这个Company类就有了可迭代的功能,是一个可迭代类型),这边用for循环在这里面取得的i为__getitem__所定义返回的结果(第一次取得tom,第二次取得bob),__getitem__中的item参数实则为做循环时的index在python内部会不停根据这个定义的方法根据索引返回出这个employee的索引结果。
总结:
可以看到了魔法函数的强大,魔法函数可以增强以及丰富我们类的功能,
注意
魔法函数在python内部已经规定好,我们无法自己定义一个,只能根据不同的魔法函数的设计规则,去重写规定我们类对象的功能。