一、初始化:
1、__new__方法,初始化过程中第一个用到的方法(用处不大)。
2、之后,__init__方法,构造方法。
3、最后,在对象回收时,调用__del__方法。如果解释器退出时,对象还存在,则不能保证__del__能够执行。
二、比较
__cmp__(self, other) 定义了比较的行为。
__eq__(self, other) 定义了等号的行为, == 。
__ne__(self, other) 定义了不等号的行为, != 。
__lt__(self, other) 定义了小于号的行为, < 。
__gt__(self, other) 定义了大于等于号的行为, >= 。
1 class Word(str): 2 '''存储单词的类,定义比较单词的几种方法''' 3 4 def __gt__(self, other): 5 return len(self) > len(other) 6 def __lt__(self, other): 7 return len(self) < len(other) 8 def __ge__(self, other): 9 return len(self) >= len(other) 10 def __le__(self, other): 11 return len(self) <= len(other)
三、运算符
1、一元运算符:正/负/abs(绝对值)/~(取反)
2、普通运算符:加减乘除/取模/指数/与或等都有对应的魔术方法,以及反运算方法。
四、类型转换
__int__(self)实现整型的强制转换。
五、表现你的类
__str__(self)定义了str()调用的时候的返回值,人类可读。
__repr__(self)定义了repr()调用的时候的返回值,机器可读。
__unicode__(self)定义了unicode()调用的时候的返回值,与str()类似。
__hash__(self)定义了当hash()调用的时候的返回值,它返回一个整型,用来在字典中快速比较。
__nozero__(self)定义了bool()调用时候的返回值。
六、控制属性访问
__getattr__(self, name) 可以定义当用户试图获取一个不存在属性时的行为。适用于对普通拼写错误的获取和重定向。
__setattribute__(self, name) 可以定义当用户获取属性时的行为。
__setattr__(self, name) 可以定义当用户设置属性时的行为。
__delattr__(self, name) 可以定义当用户删除属性时的行为。
七、序列
1 class FunctionalList: 2 '''一个封装了一些附加魔术方法比如 head, tail, init, last, drop, 和take的列表类。 3 ''' 4 5 def __init__(self, values=None): 6 if values is None: 7 self.values = [] 8 else: 9 self.values = values 10 11 def __len__(self): 12 return len(self.values) 13 14 def __getitem__(self, key): 15 #如果键的类型或者值无效,列表值将会抛出错误 16 return self.values[key] 17 18 def __setitem__(self, key, value): 19 self.values[key] = value 20 21 def __delitem__(self, key): 22 del self.values[key] 23 24 def __iter__(self): 25 return iter(self.values) 26 27 def __reversed__(self): 28 return reversed(self.values) 29 30 def append(self, value): 31 self.values.append(value) 32 def head(self): 33 return self.values[0] 34 def tail(self): 35 return self.values[1:] 36 def init(self): 37 #返回一直到末尾的所有元素 38 return self.values[:-1] 39 def last(self): 40 #返回末尾元素 41 return self.values[-1] 42 def drop(self, n): 43 #返回除前n个外的所有元素 44 return self.values[n:] 45 def take(self, n): 46 #返回前n个元素 47 return self.values[:n]
八、反射
isinstance()对应于__instancecheck__(self, instance)
issubclass()对应于__subclasscheck__(self, instance)
九、可以调用的对象__call__(self, args),主要用于改变实例的状态。
十、会话管理,__enter__和__exit__
十一、序列化对象