python中的item

所谓Attr系列,其实是setattr,delattr,getattr 三个函数,从名字中可以看出来这是一套设置,删除,查询的函数,那我们来一个一个的看:

setitem(self,key,value):当对类中的某个属性进行"赋值"时触发的函数(只有使用字典赋值的方式时才会触发此方法的执行)

与Attr系列的区分:setattr(self):是在对象打点儿的方式赋值时,才会触发的方法

代码示例:

class Foo:
    def __setitem__(self, key, value):
        print(key,"获得",value)
f = Foo()
f["name"] = "egon"

delitem(self,key):当类中的某个属性被删除时,触发此方法(只有使用del字典方式删除属性时,才会触发此方法)

与Attr系列的区分:delattr(self):使用del类打点儿属性的方式删除属性,才会触发此方法

代码示例:

 class Foo:
     name = "egon"
     def __delitem__(self, key):
         print(key,"已被删除")
 f = Foo()
 del f["name"]
__getitem__(self,item):当调用类中的属性或方法时触发此方法的执行(只在使用类[key]字典的方式调用时,才会触发此方法)

与Attr系列的区分:其实这里已经很明显了,getattr(self):是类打点儿调用且命名空间没有发现名字的情况下,触发此方法

代码示例:

class Foo:
     name = "egon"
     def __getitem__(self, item):
         print(item,"已被调用")
 f = Foo()
 f["name"]

综合代码实例

#item系列
class Foo: #Dict
    def __init__(self,name,age):
        self.name=name
        self.age = age

    def __getitem__(self, item): #item='namexxx'
        print('getitem...')
        return self.__dict__.get(item)

    def __setitem__(self, key, value):
        print('setitem...')
        print(key,value)
        self.__dict__[key]=value

    def __delitem__(self, key):
        print('delitem...')
        print(key)
        del self.__dict__[key]

obj=Foo('alex',11)
print(obj.__dict__)


#查看属性:
# obj.属性名
# print(obj['namexxx']) #obj.name


#设置属性:
obj.sex='male'
obj['sex']='male'

# print(obj.__dict__)
# print(obj.sex)


#删除属性
del obj.name
del obj['name']
#
# print(obj.__dict__)


你可能感兴趣的:(python中的item)