面向对象4 类的特殊成员之:getitem、setitem、delitem,自定义session框架会用到
class Foo:
def __init__(self):
print("init")
def __call__(self):
print("call")
return 1
def __getitem__(self,something):
print(something)
r = Foo()
r["what"]
输出:what
类对象像字典一样使用中括号,自动执行类中__getitem__方法
__getitem__()可以使用中括号读取,要设置内容就要用__setitem__():
class Foo: def __init__(self): print("init") def __call__(self): print("call") return 1 def __getitem__(self,something): print(something) def __setitem__(self,key,value): print(key,value) r = Foo() r["key"] = 123
输出:
init
key 123
类似于字典列表等,也可以有del方法,使用del调用的是__delitem__()方法:
class Foo: def __getitem__(self,something): print(something) def __setitem__(self,key,value): print(key,value) def __delitem__(self,value): print(value) r = Foo() del r["aaa"]
输出:aaa
PS:getitem方法不仅可以:r["key"],还可以用切片取值:
r[1:3] #通过__getitem__()方法
r[1:3] = [11,22,33] #通过__setitem__()方法
del r[1:3] #通过__delitem__()方法
class Foo:
def __getitem__(self,something):
print(something)
def __setitem__(self,key,value):
print(key,value)
def __delitem__(self,value):
print(value)
r = Foo()
r[1:3]
输出:slice(1, 3, None)
解释:它会把贴片作为一个整体传给__getitem__()方法,1是贴片开始,3是截止,None是间隔,标准贴片例子:list[1:5:2]

浙公网安备 33010602011771号