zoukankan      html  css  js  c++  java
  • Python3 item系列

    一、前言

    #在python中一切皆对象
    '''
    创建了一个dict实例-->dic就是dict的实例对象
    我们通过dic['k1']可以得到k1所对应的值
    那么我们自定义一个类,可不可以使用对象[变量名]的方式得到我们想要得到的值呢?
    '''
    dic = dict({'k1':'v1','k2':'v2'})
    
    print(dic['k1'])

    我们创建一个字典对象并赋初始值,我们可以通过字典对象[key]得到其dic[key]所对应的value。

    那么我们自定义一个类,能否通过对象[变量名]得到我们想要的值呢?

    class Person(object):
        def __init__(self,name,age):
            self.name = name
            self.age = age
    
    
    zhangsan = Person('zhangsan',30)
    print(zhangsan['name'])  #TypeError Person object is not subsctiptable

    编译器报错了,Python内部提供了支持这种方式访问我们的对象属性的方式,是item系列

    二、__getitem__(self,item)

    class Person(object):
        def __init__(self,name,age):
            self.name = name
            self.age = age
    
        def __getitem__(self, item):
            return self.__dict__[item]
    
    zhangsan = Person('zhangsan',30)
    print(zhangsan['name']) 

    obj[变量名]  实际上调用了内部的__getitem__(self,item)方法,我们可以通过实现这个方法,来实现想要的效果。

    self.__dict__返回的是字典类型的 对象所有的属性

    我们通过__getitem__获取到了对象的属性值,响应的也会有对对象的属性进行赋值和修改值得操作:__setitem__()

    三、__setitem(self,key,value)

    class Person(object):
        def __init__(self,name,age):
            self.name = name
            self.age = age
    
        def __getitem__(self, item):
            return self.__dict__[item]
    
        def __setitem__(self, key, value):
            self.__dict__[key] = value
    
        def getinfo(self):
            print(self.__dict__) #{'name': 'zhangsan', 'age': 30}
    
    
    zhangsan = Person('zhangsan',30)
    print(zhangsan['name'])
    zhangsan['age'] = 40     #将年龄修改为40
    print(zhangsan['age'])   #40

    此时的年龄被修改为40

    除了可以修改属性值的作用,__setitem__()还可以添加对象属性

    class Person(object):
        def __init__(self,name,age):
            self.name = name
            self.age = age
    
        def __getitem__(self, item):
            return self.__dict__[item]
    
        def __setitem__(self, key, value):
            self.__dict__[key] = value
    
        def getinfo(self):
            print(self.__dict__) #{'name': 'zhangsan', 'age': 30}
    
    
    zhangsan = Person('zhangsan',30)
    print(zhangsan['name'])
    zhangsan['age'] = 40
    print(zhangsan['age'])
    zhangsan['school'] = '清华'
    print(zhangsan.school)  #清华
    print(zhangsan['school'])  #清华
    __setitem__添加对象属性

    四、删除对象属性

    class Person(object):
        def __init__(self,name,age):
            self.name = name
            self.age = age
    
        def __getitem__(self, item):
            return self.__dict__[item]
    
        def __setitem__(self, key, value):
            self.__dict__[key] = value
    
        def getinfo(self):
            print(self.__dict__) #{'name': 'zhangsan', 'age': 30}
    
        def __delitem__(self, key):
            del self.__dict__[key]
    
    zhangsan = Person('zhangsan',30)
    print(zhangsan['name'])
    zhangsan['age'] = 40
    print(zhangsan['age'])
    zhangsan['school'] = '清华'
    print(zhangsan.school)  #清华
    print(zhangsan['school'])  #清华
    
    del zhangsan['school']
    print(zhangsan['school']) #KeyError : 'school'
    __delitem__删除对象属性
  • 相关阅读:
    iOS 多态的简单思想
    WPF SDK研究 之 AppModel
    SQL实现统计字符串出现的频次
    Python学习心得(一) 列表List
    GreenPlum之数组合并取交集及行变列、列变行函数
    SQL Server日常总结生僻小技巧 10个可能有八个平时都没用到过
    GreenPlum之按月份或季度实现行转列
    GreenPlum之生成月份字典表
    postgresql数据库中判断是否是数字和日期时间格式函数
    maven构建报错org.apache.maven.lifecycle.LifecycleExecutionException
  • 原文地址:https://www.cnblogs.com/weihengblog/p/8557277.html
Copyright © 2011-2022 走看看