面向对象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]

 

posted @ 2018-10-04 02:24  greenfan  阅读(201)  评论(0)    收藏  举报