python中有些特殊的方法,以双上下划线开头,并以双下划线结束的方法。如__getitem__,这些方法是特殊的方法,供python解释权内部使用,一般来说不需要调用

还有一种是以双下划线开头的,如__xxx,这些方法是私有方法,供类的内部使用,最好不要在外部使用。

如何使用特殊方法

my_object.__len__()这是给内部使用的,要在外部使用应该使用len(my_object),如果my_object是自定义类,python会调用其内部的__len__方法,当然我们可以重写该方法

如果是python内置的类型,如列表,字符串,字节序列等,那么CPython会抄个近路,__len__实际上会直接返回PyVarObject里的ob_size属性。PyVarObject是表示内存中长度可变的内置对象的C语言结构体。直接读取这个值比调用一个方法要快的多。

很多时候,特殊方法的调用是隐式的,比如for i in x:这个语句,背后其实用的是iter(x),而这个函数的背后则是x.__iter__()方法。当然前提是该方法在x中被实现了

通常代码中无需直接使用特殊方法,除非有大量的元编程存在,直接调用特殊方法的频率应该远远低于你去实现他们的次数。唯一的例外可能是__init__方法。代码中经常会用到它。目的是在子类中的__init__方法中调用超类的构造器

字符串表示形式

python有一个内置的函数叫repr,能把一个对象用字符串的形式表达出来以便辨认,这就是"字符串表示形式",repr是通过__repr__这个特殊的方法来得到一个对象的字符串表示形式,如果没有实现__repr__方法。当我们在控制台打印一个对象的实例时,得到的会是<xxx object at 0x10e100070>,__repr__所返回的字符串应该准确,无歧义,并且尽可能的表达出如何用代码创建出这个被打印的对象。

__repr__,__str__的区别在于,后者是在str()函数中被使用或者在print函数中才被调用,并且返回的字符串对终端用户更友好。

如果只想实现这两个特殊方法的一个,__repr__是更好的选择,如果一个对象没有__str__函数,而python又需要调用它的时候,解释器会用__repr__代替

自定义的布尔值

默认情况下,我们自己定义的类的实例总是被认为是真的,除非这个类对__bool__或__len__函数有自己的实现。bool(x)的背后总是调用x.__bool__()的结果,如果不存在__bool__方法,那么bool(x)会尝试调用x.__len__()。若返回0则bool返回False,否则返回True、

特殊方法一览

流畅的python第一章python数据模型学习记录的更多相关文章

  1. python第一章 python基础编程

    第一次学习python 首先python对于我来说是我学习的第三门语言,之前大一学习过了c和c++这两门语言. 接触一个新语言,首先应该的是搭载一下编译的环境.我们是老师给我们上传了的python3安 ...

  2. [Python笔记][第一章Python基础]

    2016/1/27学习内容 第一章 Python基础 Python内置函数 见Python内置函数.md del命令 显式删除操作,列表中也可以使用. 基本输入输出 input() 读入进来永远是字符 ...

  3. 简学Python第一章__进入PY的世界

    #cnblogs_post_body h2 { background: linear-gradient(to bottom, #18c0ff 0%,#0c7eff 100%); color: #fff ...

  4. Python第一周基本语句学习整理

    目录 Python第一周基本语句学习整理 一.字符串切割 二.体重单位转换 三.计算器的实现 四.猜年龄游戏 Python第一周基本语句学习整理 一.字符串切割 代码实现: s = 'luowenxi ...

  5. 0001-20180421-自动化第一章-python基础学习笔记

    ======================学习python==================介绍: python种类: cpython(*),jpython,ironpython,rubypyth ...

  6. 学习python 第一章

    目录 第一章... 1 1:新建项目... 1 2:修改默认模板... 3 3:什么是变量... 3 4:重指向... 3 5:常量的表示... 4 6:格式化输出(三种方法)... 4 7:打印一个 ...

  7. python第一章计算机基础

    第一章 计算机基础 1.1 硬件 计算机基本的硬件由:CPU / 内存 / 主板 / 硬盘 / 网卡 / 显卡 / 显示器 等组成,只有硬件但硬件之间无法进行交流和通信. 1.2 操作系统 操作系统用 ...

  8. 第一章 Python程序语言简介

    第一节 Python概述 1. 什么是Python Python是一种 解释型.面向对象.动态数据类型 的高级程序设计语言.由Guido van Rossum与1989年发明,第一个公开发行版本发行于 ...

  9. 第一章 Python 基础

    1. 为什么学习 Python? 答题路线:a.python的优点,b.python的应用领域广 具体: 优点 1.python语法非常优雅,简单易学 2.免费开源 3.跨平台,可以自由移植 4.可扩 ...

随机推荐

  1. 小知识-为什么Linux不需要磁盘碎片整理

      转载至:http://beikeit.com/post-495.html 简单译文: 这段linux官方资料主要介绍了外部碎片(external fragmentation).内部碎片(inter ...

  2. Django基础之form组件

    Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否 ...

  3. window下线程同步之(Critical Sections(关键代码段、关键区域、临界区域)

    关键区域(CriticalSection) 临界区是为了确保同一个代码片段在同一时间只能被一个线程访问,与原子锁不同的是临界区是多条指令的锁定,而原子锁仅仅对单条操作指令有效;临界区和原子锁只能控制同 ...

  4. ZOJ 2967 Colorful Rainbows

    暴力. 先删掉一些边,平行的线只保留$b$最大的.然后暴力,每次放入第$i$条边,和还没有被完全覆盖的边都算一遍,更新一下. #pragma comment(linker, "/STACK: ...

  5. Sqli-labs less 12

    Less-12 本关和less11是类似的,只是在id 的参数的处理上有一定的不同 当输入username:admin" Password: (随便) 报错后的结果为: You have a ...

  6. NetworkManager概述

    NetworkManager服务是管理和监控网络设置的守护进程,CentOS7更加注重使用NetworkManager服务来实现网络的配置和管理,CentOS7以前是通过network服务管理网络,以 ...

  7. apue第16章笔记

    intel 都是小端,小端即最低有效字节在最低地址上. tcp/ip协议栈使用大端字节序. connect失败可能是一瞬时的,用指数补偿算法处理,exponential backoff.但是在bsd套 ...

  8. Flask实战第67天:Flask+Celery实现邮件和短信异步发送

    之前在项目中我们发送邮件和 短信都是阻塞的,现在我们来利用Celery来优化它们 官方使用文档: http://flask.pocoo.org/docs/1.0/patterns/celery/ re ...

  9. Flask实战第60天:帖子分页技术实现

    编辑manage.py,添加测试帖子 @manager.command def create_test_post(): for x in range(1, 100): title = '标题{}'.f ...

  10. 设计模式-模板方法模式(the Template Method Pattern)

    本文由@呆代待殆原创,转载请注明出处:http://www.cnblogs.com/coffeeSS/ 模板方法模式简介 这是一个被用的相当广泛的一种设计模式,变体也特别多,他建立一个抽象类定义一个算 ...