################## __new__ ##################
@staticmethod
__new__(cls [, ...])
类的构造器,建立某个类的实例,返回值应该是cls 的实例。 它执行在 cls的 __init__ 以前。
若是__new__不返回cls一个实例,将不会再执行 cls 的 __init__java
################## __init__ ##################
__init___(self [, ...])
类的构造器ide
################## __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),code
2)若是未找到对应的 "rich comparison",则使用 __cmp__:
__cmp__(self, other)
在使用__cmp__时, 若是 self < other ,返回负整数,若是 self == other 返回 0,若是 self > other 返回正整数对象
3)若是__cmp__也没有找到,则使用object identity (“address”) 进行比较。unicode
################## __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 | 1get
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)来遍历