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. List转换为DataTable List<Entity>

    /// <summary> /// 将List转换成DataTable /// </summary> /// <typeparam name="T"& ...

  2. JS将日期转换为yyyy-MM-dd HH:mm:ss

    //格式化后日期为:yyyy-MM-dd HH:mm:ss function FormatAllDate(sDate) { var date = new Date(sDate); var sepera ...

  3. Elements in iteration expect to have 'v-bind:key' directives.' 提示错误如何解决?

    在学习vue过程中遇到Elements in iteration expect to have 'v-bind:key' directives.' 这个错误,查阅资料得知Vue 2.2.0+的版本里, ...

  4. laravel中新增路由文件

    随着业务的发展,前后台和不同平台的代码都写在一个路由文件里面会非常庞杂,这时候就诞生了拆分路由文件的需求,好在Lavravel给我们提供了支持: 1.在routes文件夹中添加新的路由文件如:admi ...

  5. cordova plugin 大全及安装命令

    前言:用cordova开发hybrid app的过程中,由于是html5开发的app,在手机上很多权限受限制,这就导致了我们需要安装很多插件来弥补这一缺点.在网上搜了好久,感觉都不是很全,所以自己整理 ...

  6. 使用CSS让元素尺寸缩小时保持宽高比例一致

    CSS中有一个属性padding对元素宽度存在依存关系.如果一个元素的 padding属性以百分比形式表示,padding 的大小是以该元素自身宽度为参照的. 若想要元素尺寸变化时,宽高比例不变,可以 ...

  7. JSP2 自定义标签

    实现步骤 实现自定义标签的处理类继承javax.servlet.jsp.tagext.SimpleTagSupport,并重写doTag方法 建立标签库配置文件 在jsp中使用自定义标签 一个简单的标 ...

  8. go chapter 1

    case 1 // helloworld.go package main import "fmt" func main() { fmt.Println("Hello, 世 ...

  9. 使用appframework前端框架中输入框圆角问题

    目前使用HTML5技术来开发手机跨平台app已经成为了曾经的web开发人员介入移动开发的一条捷径.与此对应也出现了很多新的技术来支撑这样的开发方式,例如国外的phonegap和国内的APPcan等.很 ...

  10. luogu P1002 过河卒

    题目描述 棋盘上A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下.或者向右.同时在棋盘上C点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点.因此称之为“马拦过河卒”. ...