python魔法函数介绍

云玩家
• 阅读 184

什么是魔法函数
先来定义一个类:

In [1]:

class Company(object): def __init__(self, employee_list): self.employee_list = employee_list
In [4]:

company = Company(['张三', '李四', '王五']) print(company)
<__main__.Company object at 0x7f7c4046ebd0>
此时,直接对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内部机制自动会给类赋予这些特殊的函数,且用户是不能创建魔法函数的,即使函数名以双下划线开头和双下划线结尾。通过魔法函数可以实现许多个性化、便捷的操作。

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
CuterCorley CuterCorley
4年前
商业数据分析从入门到入职(8)Python模块、文件IO和面向对象
前言本文先介绍了Python中程序、模块和包的基本使用,并在此基础上介绍了Python标准库。然后详细介绍了Python中的文件IO操作,包括文本文件、二进制文件的读写和其他IO操作。最后介绍了面向对象,包括类的定义、继承的使用、鸭子类型和魔法方法。一、程序、模块和包1.自定义模块和包之前我们使用的.ipynb文件都不是纯Python文件,
Stella981 Stella981
3年前
Python函数式编程
函数式编程\TOC\函数式编程。函数参数中的魔法coming...位置参数关键字参数默认参数动态参数位置参数收集关键字参数收集收集参数行为的逆向过程(解参,这个逆向过程用于实参上)参数传递嵌套函数定义
Stella981 Stella981
3年前
Python中的__new__及其用法
\_\_new\_\_和\_\_init\_\_的区别\_\_new\_\_是Python面向对象语言中一个很少用的函数,更多使用的是\_\_init\_\_这个函数。例如:class Book(object):    def __init__(self, title):
Stella981 Stella981
3年前
Python中多继承与super()用法Python类分为两种,一种叫经典类,一种叫新式类。两种都支持多继承。
classA(object):def__init__(self,args,kwargs):print"argsis:{}".format(args)print"kwargsis:{}".format(kwargs)class
Wesley13 Wesley13
3年前
JS中那些鲜为人知的骚操作
前言曾经,我接手了一份大佬的代码,里面充满了各种“骚操作”,还不加注释那种,短短几行的函数花了很久才弄懂。!(https://oscimg.oschina.net/oscnet/1849cc3b16479486464799b24f7e6573185.jpg)这世上,“只有魔法才能对抗魔法”,于是后来,翻阅各种“黑魔法”的秘籍,总结了一些比较实用
Stella981 Stella981
3年前
PythonStudy——魔法函数 Magic Methods
魔法函数python中以双下划线开始和结束的函数(不可自己定义)为魔法函数调用类实例化的对象的方法时自动调用魔法函数(感觉不需要显示调用的函数都叫)在自己定义的类中,可以实现之前的内置函数,比如下面比较元素sorted时用It函数(lt(self,other):判断self对象是否小于other对象;)
Stella981 Stella981
3年前
Python 的 Magic Methods 指南
_摘要:_ 介绍本指南是数月博客的总结。主题是魔术方法。什么是魔术方法呢?它们是面向对象Python语言中的一切。它们是你可以自定义并添加“魔法”到类中的特殊方法。它们被双下划线环绕(比如\_\_init\_\_或\_\_lt\_\_)。介绍本指南是数月博客的总结。主题是魔术方法。什么是魔术方法呢?它们是面向对象Python语言中的一
Stella981 Stella981
3年前
Python中函数和方法的区别
1、函数要手动传self,方法不用传self2、如果是一个函数,用类名去调用,如果是一个方法,用对象去调用 举例说明:classFoo(object):def__init__(self):self.name"haiyan"deffunc(self):