本文主要内容
collections.namedtuple
__getitem__ 和 __len__
__repr__和__str__
__abs__、__add__和__mul__
__bool__
本文内容的表格式总结
语 法
调用的方法(按照顺序寻找)
备注
list[2]
__getitem__(2)
list[1:3:2]
__getitem__(slice(1,3,2))
切片时传入的参数是slice类型
for i in object:
__iter__()、__getitem__()
__iter__需要返回迭代器,并不断调用next()
in object
__contains__()、__iter__()、__getitem__()
__iter__()、__getitem__()会按照顺序搜索
print(object)
__str__()、__repr__()
if object:
__bool__()、__len__()
使用if、while等判断句时,会调用__bool__()
如果没有这两个方法,一般情况下,自定义的类总认为是真的
何为python的数据模型
本文所指的python数据模型,也可成为python中内置的对象模型(一切皆为对象),其包含的一些方法为特殊方法,在java中也称“魔术方法”。由于python文档里面喜欢使用“数据模型”这个词,所以本文依此称数据模型。
简单来说,数据模型就是python自有的数据类型,及其包含的特殊方法。例如:使用len()时会调用__len__特殊方法;使用list[]时会调用__getitem__方法;使用各类运算符也会调用其相对应的方法。从根本上而言,list[]、+、-、*、/、for i in x这些写法只是为了更简洁和更具有可读性,但内部跟其他操作一下,也是通过方法实现的,这就是特殊方法。
可命名元组(namedtuple)
#导入可命名元组
from collections importnamedtuple#创建的两种方法 (创建股票模型,每只股票包括name和price)
Stock_1= namedtuple("stock", ("name", "price")) #方法1:第二个参数传入可迭代对象(元组、数组等都可)
Stock_2= namedtuple("stock", "name price") #方法2:字符串之间用空格隔开
#生成多只股票
stock01 = Stock_1("SH000001", 1)
stock02= Stock_1("SH000002", 12)
stock03= Stock_1("SH000003", 123)
stock04= Stock_1("SH000004", 1234)#访问股票信息
print(stock01.name) #属性形式 SH000001
print(stock04[1]) #列表形式 1234
__getitem__ 和 __len__
1、__len__
classFoo:def __len__(self): #重写__len__方法
print("method __len__")return 1
if __name__ == "__main__":
foo=Foo()
n= len(foo) #使用len()时会自动调用__len__方法:method __len__