面向对象_item项目

 详细见老师博客:http://www.cnblogs.com/Eva-J/articles/7351812.html#_label9

__getitem__\__setitem__\__delitem__

class Foo:
    def __init__(self,name,age,sex):
        self.age=age
        self.name=name
        self.sex=sex
    def __getitem__(self, item):
        print('执行了__getitem__')
        if item in self.__dict__.keys():
            # return self.item 此处不能这样写,会报错,没有这个属性
            return self.__dict__[item]
        else:
            print('have no your find')
    def __setitem__(self,key,value):
        print('执行了__seritem__')
        self.__dict__[key]=value
    def __delitem__(self,key):
        print('执行了__delitem__')
        del self.__dict__[key]
alex= Foo('alex',18,'male')
print(alex['name'])#调用了__getitem__
print(alex.name)#正常的调法
alex.age=20#正常的改法
print(alex.__dict__)
alex['age']=200#调用了__setitem__,并且改正了值
print(alex.__dict__)
del alex['name']#调用了__delitem__
                #此时的del 并不是删除的意思,而是调出了__delitem__
                #这个方法而已,所以需要在__delitem__中加入删除的代码
print(alex.__dict__)
'''输出结果执行了__getitem__
alex
alex
{'age': 20, 'sex': 'male', 'name': 'alex'}
执行了__seritem__
{'age': 200, 'sex': 'male', 'name': 'alex'}
执行了__delitem__
{'age': 200, 'sex': 'male', 'name': 'alex'}
'''

 注意__item__的各个内置函数的调用,

__getitem__的调用方式是:对象[key]

            等价的调用方式:对象.属性

__setitem__的调用方式是:对象[key]=value

            等价的调用方式:对象 .属性=value

__delitem__的调用方式时:del 对象[key]  只是调用了__delitem__方法而已,并不是真正的删除

            等价的调用方式:del 对象.属性

这个方法主要是记住所有的 . 变为[],便可以调此方法了

有一个的函数的调用方式很相似:

      记起来了,这个是把方法变为属性的装饰器@property,通过修改达到了和正常属性的调法

原文地址:https://www.cnblogs.com/accolade/p/10519477.html