容器相关魔术方法
- __len__
内建函数len(),返回对象的长度(>=0),把对象当作容器类型看,如同list或dict,bool()函数调用的时候,如果没有__bool__()方法,则会看__len__()方法是否存在,存在返回非0为真 - __iter__ 迭代容器时调用,返回一个新的迭代器对象
- __containers__ in成员运算符,没有实现,就调用__iter__()方法遍历
- __getitem__ 实现self[key]访问,序列对象,key接受整数为索引,或者切片,对于set/dict,key为hashable, key不存在引发KeyError异常
- __setitem__ 和__getitem__类似,设置值的方法
- __misssing__ 字典使用__getitem__()调用时,key不存在执行
class Item:
def __init__(self,name,**kwargs):
self.name=name
self._spec=kwargs
def __repr__(self):
return '{} : {}'.format(self.name,self._spec)
class Cart:
def __init__(self):
self.items=[]
def __len__(self):
return len(self.items)
def additem(self,item):
self.items.append(item)
return True
def __repr__(self):
return 'cart: {}'.format(self.items)
def __add__(self,other):
print(other)
# if isinstance(other,Item):
self.items.append(other)
return self
def __iter__(self):
return iter(self.items)
def __getitem__(self,item):
return self.items[item]
def __missing__(self,key): # dict/set key missing
print(key)
def __setitem__(self,key,value):
self.items[key]=value
cart=Cart()
print(cart+2+3+5)
# print(len(cart))
# for b in cart: # 本质上调用next()
# print(b)
cart[1]=777
print(cart[1])
print(2 in cart)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律