`
wx1568037608
  • 浏览: 33428 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

python常用魔法函数

 
阅读更多

1、__init__():

所有类的超类object,有一个默认包含pass的__init__()实现,这个函数会在对象初始化的时候调用,我们可以选择实现,也可以选择不实现,一般建议是实现的,不实现对象属性就不会被初始化,虽然我们仍然可以对其进行赋值,但是它已经成了隐式的了,编程时显示远比隐式的更好,看下面的小栗子:

 

 

我们可以通过vars函数获知显示声明的属性,但是隐式的就无法获知了,这并不值得提倡,但是在知道参数的情况下我们还是可以对其进行赋值的,如下:

 

不论怎么样,显示的初始化属性是一个好习惯。

2、__str__():

直接打印对象的实现方法,__str__是被print函数调用的,一般都是return一个什么东西,这个东西应该是以字符串的形式表现的。如果不是要用str()函数转换,我们可以直接print的对象都是实现了__str__这个方法的,比如dict。看下面的例子。

 

 

__str__是dict其中的一个方法,这个方法的实现赋予了它直接被print的能力,知道这些,我们就可以给自己的类定义这个方法使其可以print了,例子如下:

 

 

但是这个函数返回值必须为string,否则会抛异常:

 

 

3、__new__():

在object类中存在一个静态的__new__(cls, *args, **kwargs)方法,该方法需要传递一个参数cls,cls表示需要实例化的类,此参数在实例化时由Python解释器自动提供,__new__方法必须有返回值,且返回的是被实例化的实例,只有在该实例返回后才会调用__init__来进行初始化,初始化所用的实例就是__new__返回的结果,也就可以认为是self,我们来看下面的例子:

 

 

可以看到,在实例化时候,先执行__new__再执行__init__,而且python会自动传入我们希望实例化的类,的这里我们显示的调用了object的__new__,也可以调用其他的父类的__new__,那么如果我们定义了__new__,但是并没有返回一个本身实例,会发生什么事呢?例子如下:

 

 

可以看到本身的__init__函数并未被调用,而是调用了str的__init__,可能这样并不直观,那么换一个实例返回,如下:

 

 

这个就比较明显了,另一个实例的__init__被调用了。

4、__unicode__():

__unicode__()方法是在一个对象上调用unicode()时被调用的。因为Django的数据库后端会返回Unicode字符串给model属性,所以我们通常会给自己的model写一个__unicode__()方法。如果定义了__unicode__()方法但是没有定义__str__()方法,Django会自动提供一个__str__()方法调用 __unicode__()方法,然后把结果转换为UTF-8编码的字符串对象,所以在一般情况下,只定义__unicode__()方法,让 Django来处理字符串对象的转换,看一个小栗子:

 

在django中,虽然没有定义__str__,但是django会将__unicode__转为了str,当然你调用unicode更加是没有问题的。

5、__call__():

对象通过提供__call__()方法可以模拟函数的行为,如果一个对象提供了该方法,就可以像函数一样使用它,还是用例子进行说明。

 

 

可以看到,我们在像使用函数一样使用类,实在是很有意思的事。

6、__len__():

len调用后会调用对象的__len__函数,我们可以为其定制输出,如下例子:

 

 

但是该函数要求我们返回的值必须为int,否则会报错,如下:

 

 

7、__repr__():

函数str() 用于将值转化为适于人阅读的形式,而repr() 转化为供解释器读取的形式,某对象没有适于人阅读的解释形式的话,str() 会返回与repr(),所以print展示的都是str的格式。例子:

 

 

8、__setattr__():

该函数可以设置函数的属性,文字不知怎么描述,直接上例子:

 

 

从上例可以看出,__setattr__函数可以支持对象增加属性,我们可以有计划的修改增加属性的内容。

9、__getattr__()

获取对象属性,只有在属性没有找到的时候调用,还是看例子:

 

第一个属性可以找到,所以不会调__getattr__,第二个属性找不到,所以会调用到。

10、__getattribute__():

    该函数和上面介绍的__getattr__很像,都是获取属性,但是__getattr__是在属性不存在时被调用,而__getattribute__是无条件被调用,这样会方便我们做一些控制,需要注意,一旦定义了__getattribute__,则__getattr__不再会被调用,除非显式调用,例子如下:

 

11、__delattr__():

本函数的作用是删除属性,实现了该函数的类可以用del 命令来删除属性,下面还是看个例子。

 

12、__setitem__():

该函数可以给对象赋值,我们可以以下标的方式对其进行操作,下面看个例子。

 

13、__getitem__():

与上函数相反,__getitem__可以使对象支持已下标的方式获取值,例子如下:

 

这一类魔法函数对我们来说最大的好处是可以增加代码的优雅程度,并且可以方便的进行流程的控制,上面的例子,我们向操作字典一样在操作一个对象,并且在赋值与取值时都进行了变更,实在是比较好玩。

14、__delitem__():

    该函数支持以下标方式删除对象数据,实现了这三个函数,这个类就像字典一样,具备了基本的增删查功能,有时候这样写会很方便。

 

15、__iter__():

只要定义了__iter__()方法对象,就可以使用迭代器访问,这意味着,我们可以迭代我们自己定义的对象,具体请看第三章,例子如下。

 

16、__del__():

这可以说是一个析构器,或者回收器,在对象引用数降到0时执行,有时可能还需要等一会再执行,所以一般不推荐使用,但是在代码中我们偶尔可以用它来实现一些必须要做的,但是并不紧急的事,下面是个例子。

 

可以看到,在对象不再被引用后,会运行__del__函数。

分享到:
评论

相关推荐

    Python黑魔法指南v3.01

    《Python黑魔法指南v3.01》是一本探索Python编程中不常用或不为人知特性的书籍。本文将从书中的几个章节提取关键知识点进行详细介绍。 1.1 **默默无闻的省略号(...)** 在Python中,省略号`...`是一个特殊的标识符...

    python面试常用的常用38题

    Python面试常用的38道题 本文总结了Python面试中常见的38道题,涵盖了Python技术、Web开发、爬虫、数据分析等领域。这些题目可以帮助开发者更好地了解Python的特性和应用。 1. Python中的可变对象与不可变对象 ...

    Python 黑魔法 v3.0.pdf

    《Python 黑魔法 v3.0》是一本深入探讨Python编程技巧和不常用特性的书籍。作者王炳明通过更新迭代,将最新的Python知识和独特的编程经验分享给读者。本书内容涵盖了一些Python中的“魔法”特性,这些特性可能不常被...

    ヴィッキーサクラの魔法陣(PYTHON)2.0-COPY.zip

    turtle库是Python教育入门时常用的一个模块,它提供了一个简单的接口,可以让用户通过编程控制一个虚拟的“海龟”在屏幕上画线,从而实现图形的绘制。 Python turtle库的核心功能包括: 1. **移动与转向**:turtle...

    Python之旅.pdf

    此外,书中还提到了Python中的“魔法”函数,即一些具有特殊功能的内置函数,它们可以增强代码的可读性和功能性。 函数式编程在现代编程中越来越受到重视,书籍介绍了高阶函数如map、reduce、filter,它们允许...

    python学习课件+python源码90个合集.7z

    017函数:Python的乐高积木(课件+源代码) 019函数:我的地盘听我的(课件+源代码) 022函数:递归是神马(课件+源代码) 023递归:这帮小兔崽子(课件+源代码) 024递归:汉诺塔(课件+源代码) 028文件:因为懂你...

    Python学习资料学习课件python基础源码.zip

    017函数:Python的乐高积木 018函数:灵活即强大 019函数:我的地盘听我的 020函数:内嵌函数和闭包 021函数:lambda表达式 022函数:递归是神马 023递归:这帮小兔崽子 024递归:汉诺塔 025字典:当索引不好用时 ...

    Learning Python(pdf+epub+mobi+code_files).zip

    《Learning Python》还将引导你探索Python的高级特性,如生成器、装饰器、上下文管理器以及Python的内置函数和魔法方法。 书中的“code_files”部分包含了与书本内容配套的源代码,你可以通过实践这些代码来加深对...

    小甲鱼《零基础入门学习Python》学习笔记1.0

    这一章节是Python学习的基石,它介绍了变量的概念、字符串的使用、原始字符串、长字符串以及Python的数据类型和常用操作符。 第4章 了不起的分支和循环 在Python中,分支语句允许程序根据不同的条件执行不同的代码...

    Python思维导图.zip

    特别地,Python的魔法方法(__magic__ methods)如__init__、__str__等在思维导图中也得到了充分展现。 五、文件操作 Python提供了丰富的文件操作接口,包括打开、关闭、读写、追加等。在xmind文件中,你可以看到...

    常用Python数据分析库详解.docx

    再者,Matplotlib是Python中最常用的数据可视化库,它支持创建各种静态、动态甚至交互式的图表。Matplotlib可以绘制折线图、散点图、柱状图、直方图等多种图形,且高度可定制化,能满足各种数据展示的需求。与...

    python从入门到精通地址.txt

    017函数:Python的乐高积木 P19. 018函数:灵活即强大 P20. 019函数:我的地盘听我的 P21. 020函数:内嵌函数和闭包 P22. 021函数:lambda表达式 P23. 022函数:递归是神马 P24. 023递归:这帮小兔崽子 P25....

    python知识点讲解

    - 函数的定义和参数传递,包括魔法函数; - 函数式编程,如高阶函数、匿名函数、闭包和装饰器; - 面向对象编程,包括类的定义、继承、多态、方法、静态方法、实例化以及特殊方法(如slots、属性装饰器@property、...

    python岗面试笔试经典题集合

    4. **标准库和内置函数**:了解常用的Python内置函数,如map,filter,reduce,zip,enumerate等,以及标准库如os,sys,re,datetime等的使用。 5. **字符串处理**:正则表达式匹配,字符串切片,格式化输出,字符...

    python高级编程.pdf

    - **常用魔法函数**: - `__init__`:初始化对象时调用。 - `__str__`/`__repr__`:返回对象的字符串表示形式。 - `__add__`:支持`+`操作符。 - `__len__`:返回对象长度。 - `__getitem__`:支持索引访问。 ...

    天池龙珠计划之Python学习_v0.0.2.pdf

    Task03则教授函数、lambda表达式、类与对象以及魔法方法,这些都是面向对象编程和函数式编程的基础。在这个阶段,学习者可以掌握Python的基础语法和常用数据结构。 Task04是一个数据分析实战项目,提供了一个实际...

    逻辑-Python核心编程.pdf

    - **常用魔法方法**:特殊的方法名,通常以双下划线开头和结尾,如`__init__`、`__str__`等。 #### 异常 - **异常捕获**:使用try-except语句来捕获和处理程序运行时可能出现的错误。 #### 模块 - **模块**:模块...

    带标签_超详细笔记以及拓展延伸知识点总结_小甲鱼零基础入门学习python系列教程

    50结:os、os.path 模块中关于文件、目录常用的函数使用方法 143 51结:time模块详解(时间获取和转换) 145 52结:datetime模块详解(基本的日期和时间类型) 150 53结:timeit模块_准确测量小段代码执行时间 170 ...

    python编程题37-42及参考答案

    11. **内置函数与魔法方法**:如len()、type()、str()、int()等内置函数,以及__init__、__str__等魔法方法。 12. **迭代器与生成器**:迭代器协议的理解,以及如何使用yield关键字创建生成器。 通过解决这些模拟...

Global site tag (gtag.js) - Google Analytics