流畅的python第一章python数据模型学习记录

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、

特殊方法一览

原文地址:https://www.cnblogs.com/lgh344902118/p/8340044.html

时间: 2024-10-16 00:36:02

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

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

#cnblogs_post_body h2 { background: linear-gradient(to bottom, #18c0ff 0%,#0c7eff 100%); color: #fff; height: 55px width:100% -moz-border-radius: 3px; padding: 3px; margin: 10px 0px; font-family: "微软雅黑", "宋体", "黑体", Arial } P

萌新向Python数据分析及数据挖掘 第一章 Python基础 (上)未排版

因word和博客编辑器格式不能完全对接,正在重新排版,2019年1月1日发出第一章完整版 本文将参考<Python编程 从入门到实践>的讲述顺序和例子,加上自己的理解,让大家快速了解Python的基础用法,并将拓展内容的链接添加在相关内容之后,方便大家阅读. 好了!我们开始第一章的学习. 第一章 Python基础 python安装以及环境搭建 python的安装和环境变量的配置通过百度查询即可解决,这里不作赘述. IDE的选择:因为后期需要用来做数据分析,所以直接安装Anaconda会是一个不

萌新向Python数据分析及数据挖掘 第一章 Python基础 第一节 python安装以及环境搭建 第二节 变量和简单的数据类型

本文将参考<Python编程 从入门到实践>的讲述顺序和例子,加上自己的理解,让大家快速了解Python的基础用法,并将拓展内容的链接添加在相关内容之后,方便大家阅读. 好了!我们开始第一章的学习. 第一章 Python基础 第一节 Python安装以及环境搭建 Python的安装和环境变量的配置通过百度查询即可解决,这里不作赘述. IDE的选择:因为后期需要用来做数据分析,所以直接安装Anaconda会是一个不错的选择. Anaconda详细安装使用教程 https://blog.csdn.

萌新向Python数据分析及数据挖掘 第一章 Python基础 第八节 函数

第一章 Python基础 第八节 函数 定义函数 函数 其实就可以理解为外挂,把一些常用的.重复率比较多你又不想重复写的东西写进函数,加上开关实现简化操作 举个简单的例子 1 def greet_user(username): 2 #定义一个叫做"迎接用户"的外挂,让他能直接打印一个问候语,括号里面是函数需要输入的东西,也就是个性化的东西 3 """先是简单的问候语""" 4 print("Hello! "

萌新向Python数据分析及数据挖掘 第一章 Python基础 第九节 类

第一章 Python基础 第九节 类 面向对象编程时,都会遇到一个概念,类,python也有这个概念,下面我们通过代码来深入了解下. 其实类 和函数都是为了节省代码,有了类的的概念,就可以把相同的代码写在父类,子类继承后就可以直接使用,而且通过选择对应的父类就可以直接使用对应父类的内容. 创建和使用类 1 class Dog(): #认识狗这类东西 2 def __init__(self, name, age): #狗是肯定有名字和年龄的,是个狗就有,要用户填写 3 self.name = na

萌新向Python数据分析及数据挖掘 第一章 Python基础 第十节 文件和异常

第一章 Python基础 第十节 文件和异常 从文件中读取数据 读取文件.文件路径   1 filename = 'pi_digits.txt' #文件名取个代号 2 #读取整个文件 3 with open(filename) as file_object: 4 contents = file_object.read()# 给内容取个代号 5 print(contents.rstrip()) 6 #逐行读取 7 with open(filename) as file_object: 8 for

headfirst python第一章初始python速记卡

headfirst python这本书非常不错,但是很多人没耐心读,出的速记卡,有用的尽管下载headfirst python第一章初识python速记卡.rar原书下载HeadfirstPython.pdf 原文地址:https://blog.51cto.com/382392/2386391

[Head First Python] - 第二章 python of comment

1- 多行注释 ''' ''' 或 """ """ '''this is the standard way to include a multiple-line comment in you code''' """this is the standard way to include a multiple-line comment in you code""" 2- 单行注释 # # t

python第一篇-------python介绍

python第一篇-------python介绍 一.python介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,Guido开始写Python语言的编译器.Python这个名字,来自Guido所挚爱的电视剧Monty Python's Flying Circus.他希望这个新的叫做Python的语言,能符合他的理想:创造一种C和shell之间,功能全面,易学易用,可拓展的语言. 最新的TIOBE排行榜,Python赶超PHP占据第4, Py