什么是魔法函数

先来定义一个类:

In [1]:
class Company(object):     def __init__(self, employee_list):         self.employee_list = employee_list
In [4]:
company = Company(['张三', '李四', '王五']) print(company)
此时,直接对Company实例化的对象进行print输出时,打印出来的信息是类名称和地址信息。但如果我们想看的不是这些,而是想输出employee_list,怎么做呢?

In [7]:
class Company(object):     def __init__(self, employee_list):         self.employee_list = employee_list          def __str__(self):         return str(self.employee_list)
In [8]:
company = Company(['张三', '李四', '王五']) print(company)
['张三', '李四', '王五']
在这个例子中,我们添加了一个__str__()函数,然后再打印输出Company类实例时,输出的就是employee_list,但是,我们并没有显式地调用__str__()函数,这是因为,在对一个实例使用print()函数时,Python内部机制自动会调用__str__()函数。

类似__str__()这种函数在类内部还有很多,这一类函数,我们统称为魔法函数。现在,我们明确一下魔法函数的范畴:

魔法函数是指类内部以双下划线开头,并且以双下划线结尾的函数,在特定时刻,Python会自动调用这些函数。魔法函数不是通过继承等机制获得的,而是类一旦定义,Python内部机制自动会给类赋予这些特殊的函数,且用户是不能创建魔法函数的,即使函数名以双下划线开头和双下划线结尾。通过魔法函数可以实现许多个性化、便捷的操作。
10-10 11:37