七、__setitem__, __getitem__, __delitem__

  当我们对类的属性item进行下标的操作时,首先会被__getitem__()、__setitem__()、__delitem__()拦截,从而进行我们在方法中设定的操作,如赋值,修改内容,删除内容等等。

  __getitem__(self,key):返回键对应的值
  __setitem__(self,key,value):设置给定键的值
  __delitem__(self,key):删除给定键对应的元素

class Foo:
    def __init__(self, name):
        self.name = name

    def __getitem__(self, item):
        # print('getitem...')
        #print(item)

        return self.__dict__.get(item)  # 字典get方法有则取值,无也不会报错

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

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

obj = Foo('egon')


# 1、查看属性
# obj.属性名
# item系列就是为了把对象模拟成像字典一样,就可以像字典一样访问
obj['name']   # 以这种形式完成 obj.name取值的效果
"""
getitem...
name
"""
print(obj['name'])

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

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

# 3、删除属性
# del obj.name
del obj['name']
print(obj.__dict__)
"""
{'sex': 'male'}
"""

 

八、__str__, __repr__,  __format__

  改变对象的字符串显示__str__,__repr__
  自定制格式化字符串__format__

d = dict({'name' : 'egon'})
print(isinstance(d, dict))  # True,d是dict类的实例
print(d)

class Foo:
    pass
obj = Foo()
print(obj)
""" 同样是打印对象,显示形式完全不同,打印总是希望像前一种有提示功能。
{'name': 'egon'}
<__main__.Foo object at 0x10401ad68>
"""

# __str__方法定义后,会在打印对象的时候,触发这个对象下的__str__方法,把字符串的结果作为打印的结果
class People:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __str__(self):  # 必须return一个字符串
        # print("触发__str__方法:")
        return '<name:%s,age:%s>' %(self.name, self.age)


obj = People('egon', 18)
print(obj)
"""
<name:egon,age:18>
"""
细究__str__

相关文章:

  • 2021-12-25
  • 2021-04-06
猜你喜欢
  • 2021-11-20
  • 2022-12-23
  • 2022-12-23
  • 2022-01-18
  • 2022-02-14
  • 2022-02-19
  • 2021-06-16
相关资源
相似解决方案