################## __new__ ##################
@staticmethod
__new__(cls [, ...])
类的构造器,创建某个类的实例,返回值应该是cls 的实例。 它执行在 cls的 __init__ 之前。
如果__new__不返回cls一个实例,将不会再执行 cls 的 __init__

################## __init__ ##################
__init___(self [, ...])
类的构造器

################## __del__ ##################
__init___(self [, ...])
类的析构函数,当使用del obj 时,或者GC时,会调用该析构函数

################## __repr__ ##################
__repr___(self [, ...])
返回一个字符串,当调用内置函数 repr(obj)时,会调用obj.__repr__

################## __str__ ##################
__repr___(self [, ...])
返回一个字符串,类似于java中的toString()。当调用内置函数 str(obj)或者print(obj)时,会调用obj.__str__

################## 比较操作符 (>,<,>=,<=,!=,==)##################
两个对象使用 比较运算符(>,<,>=,<=,!=,==)比较时,执行过程是这样的。
1)优先使用 "rich comparison",即:
__lt__(self, other),
__le__(self, other),
__eq__(self, other),
__ne__(self, other),
__gt__(self, other),
__ge__(self, other),

2)如果未找到对应的 "rich comparison",则使用 __cmp__:
__cmp__(self, other)
在使用__cmp__时, 如果 self < other ,返回负整数,如果 self == other 返回 0,如果 self > other 返回正整数

3)如果__cmp__也没有找到,则使用object identity (“address”) 进行比较。

################## __hash__ ##################
__hash__(self)
当使用内置函数 hash(object)时,或者在一个 基于hash的集合上(如 set, frozenset, dict)操作时会调用object.__hash__
该函数返回一个整数。
1)如果一个class没有定义 __cmp__或者__eq__,就不应该去定义 __hash__,
2)如果定义了__cmp__或者__eq__,但是没有定义__hash__,那么该类的实例就不能用在基于hash的集合中,仍然可以用于线性集合中。

################## 真值判断(bool(obj)) ##################
当需要进行真值测试(如使用内置函数 bool(obj)),或者在if 表达式中时,调用流程是这样的:
1)使用__nonzero__来判断真值:
__nonzero__(self)
当需要进行真值测试(如使用内置函数 bool(obj))时,会调用它。返回值是True | False,或者 0 | 1

2)如果没有定义__nonzero__,则会使用__len__:
__len__(self)
该函数,还会在使用内置函数 len(obj)时调用。
如果是 bool(obj)引起了__len__的调用,则根据__len__的返回值是否为0来判断真值

################## __unicode__ ##################
__unicode__(self)
返回一个 Unicode对象,会在使用 内置函数 unicode(obj)时调用。如果未定义该函数,则会采用系统默认的编码转换为字符串。
然后再转为Unicode。

################## 像容器一样操作对象 ##################
__len__(self)
当使用内置函数len(),bool()会调用它。

__getitem__(self, key)
__setitem__(self, key)
__delitem__(self, key)
当使用 object[key]时会调用__getitem__,当使用object[key]=value时,会调用__setitem__

__iter__(self):
该方法可以在for ... in ... 或者 if in 或者 if not in中调用,
该函数应该返回一个 iterator对象(一个有__next__(self)的对象)

__reversed__(self):
当使用内置函数 reversed()时,会调用该函数。作用是反向迭代。
该函数应该返回一个反向的iterator对象

############### if in 或者 if not in ##################
在使用 if in 或者 if not in操作时,执行顺序是:
1)使用__contains__来判断
__contains__(self, item):
返回True如果对象中包含item
2)如果对象中没有定义__contains__,则作为一个通过迭代的的方式来判断
使用__iter__(self) 返回一个iterator,
然后使用__next__迭代,迭代过程中使用 item==other 方式来判断
3)如果上述两种都没有,则通过__getitem__方式判断

###############比较对象ID( is 或者 is not) #############
is 比较对象 ID,== 比较对象值
可以将 Python 中 is 理解为与Java中的==,Python中 ==理解为java中的equals

############### for in 遍历 #########################
1)使用 __iter__ 返回一个iterator对象,然后调用其 __next__
2)如果未指定__iter__,但是有 __getitem__(self),则结合 object.__len__ 属性和 object.__getitem__(self)来遍历

Python: 内置私有方法的更多相关文章

  1. Python 的内置字符串方法(收藏专用)

    Python 的内置字符串方法(收藏专用) method 字符串 string python3.x  python 4.7k 次阅读  ·  读完需要 44 分钟 5 字符串处理是非常常用的技能,但 ...

  2. Python内置方法详解

    1. 字符串内置方法详解 为何要有字符串?相对于元组.列表等,对于唯一类型的定义,字符串具有最简单的形式. 字符串往往以变量接收,变量名. 可以查看所有的字符串的内置方法,如: 1> count ...

  3. python - 类的内置 attr 方法

    类的内置 attr 方法 #类的内置 attr 方法: # __getattr__ # __setattr__ # __delattr__ # __getattr__ #到调用一个类不存在数参数时,将 ...

  4. python内置装饰器

    前言 接着上一篇笔记,我们来看看内置装饰器property.staticmethod.classmethod 一.property装饰器 1. 普通方式修改属性值 code class Celsius ...

  5. python内置函数

    python内置函数 官方文档:点击 在这里我只列举一些常见的内置函数用法 1.abs()[求数字的绝对值] >>> abs(-13) 13 2.all() 判断所有集合元素都为真的 ...

  6. python 内置函数和函数装饰器

    python内置函数 1.数学相关 abs(x) 取x绝对值 divmode(x,y) 取x除以y的商和余数,常用做分页,返回商和余数组成一个元组 pow(x,y[,z]) 取x的y次方 ,等同于x ...

  7. Python内置的字符串处理函数整理

    Python内置的字符串处理函数整理 作者: 字体:[增加 减小] 类型:转载 时间:2013-01-29我要评论 Python内置的字符串处理函数整理,收集常用的Python 内置的各种字符串处理 ...

  8. Python基础篇【第2篇】: Python内置函数(一)

    Python内置函数 lambda lambda表达式相当于函数体为单个return语句的普通函数的匿名函数.请注意,lambda语法并没有使用return关键字.开发者可以在任何可以使用函数引用的位 ...

  9. [python基础知识]python内置函数map/reduce/filter

    python内置函数map/reduce/filter 这三个函数用的顺手了,很cool. filter()函数:filter函数相当于过滤,调用一个bool_func(只返回bool类型数据的方法) ...

随机推荐

  1. Mysql加锁过程详解(2)-关于mysql 幻读理解

    Mysql加锁过程详解(1)-基本知识 Mysql加锁过程详解(2)-关于mysql 幻读理解 Mysql加锁过程详解(3)-关于mysql 幻读理解 Mysql加锁过程详解(4)-select fo ...

  2. Tomcat(二):tomcat配置文件server.xml详解和部署简介

    Tomcat系列文章:http://www.cnblogs.com/f-ck-need-u/p/7576137.html 1. 入门示例:虚拟主机提供web服务 该示例通过设置虚拟主机来提供web服务 ...

  3. go基础系列:结构struct

    Go语言不是一门面向对象的语言,没有对象和继承,也没有面向对象的多态.重写相关特性. Go所拥有的是数据结构,它可以关联方法.Go也支持简单但高效的组合(Composition),请搜索面向对象和组合 ...

  4. Go标准库:Go template用法详解

    本文只介绍template的语法和用法,关于template包的函数.方法.template的结构和原理,见:深入剖析Go template. 入门示例 以下为test.html文件的内容,里面使用了 ...

  5. C# 实现Jwtbearer Authentication

    Jwtbearer Authentication 什么是JWT JWT(JSON Web Token), 顾名思义就是在Web上以JSON格式传输的Token(RFC 7519). 该Token被设计 ...

  6. 用Vue.js搭建一个小说阅读网站

    目录 1.简介 2.如何使用vue.js 3.部署api服务器 4.vue.js路由配置 5.实现页面加载数据 6.测试vue项目 7.在正式环境部署 8.Vue前端代码下载 1.简介 这是一个使用v ...

  7. Entity Framework Code first(转载)

    一.Entity Framework Code first(代码优先)使用过程 1.1Entity Framework 代码优先简介 不得不提Entity Framework Code First这个 ...

  8. 【转】为什么要使用ModelDriven

    ---恢复内容开始--- package cn.com.leadfar.struts2.actions; public class User { private int id ; private St ...

  9. Excel通用类工具(二)

    前言 上一篇中写到了用反射来处理类中的不用的属性,但是Excel的列名还得手动输入,这样还是比较麻烦的,今天这篇就利用自定义注解来解决手动传入列名的问题:其实很简单的,只需要在上一篇的基础上加一个类就 ...

  10. idea使用svn出现问题解决办法

    idea一直在refreshing vcs history:解决办法:      有些模块中的版本信息是错的,如拷贝过来的代码,其远程仓库是不存在的,      因此要删除这些模块中的.svn文件夹 ...