首页 > 其他 > 详细

item系列

时间:2021-04-29 15:11:44      阅读:17      评论:0      收藏:0      [点我收藏+]
class Foo:
def __init__(self, type):
self.type = type

def __getattr__(self, item):
print(‘__getattr__‘)

def __getitem__(self, item):
print(‘__getitem__‘)
# return self.__dict__[item]

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

def __delitem__(self, key):
print(‘__delitem__‘)
self.__dict__.pop(key)

f1 = Foo(‘people‘)
print(f1.__dict__) # {}

f1[‘name‘] = ‘alex‘ # __setattr__不支持此种方式,会报错;此时触发的是__setitem__
f1.age = 18 # 此时没有触发__setitem__,但也添加成功了,说明触发的是__setattr__
print(f1.__dict__) # {‘name‘: ‘alex‘, ‘age‘: 18}

del f1[‘name‘] # 此时触发的是__delitem__
# del f1.age # 此时没有触发__delitem__,但也删除成功了,说明触发的是__delattr__
print(f1.__dict__)

# f1[‘addr‘] # 没有此属性,打印__getitem__,说明触发了__getitem__
# f1.addr # 打印__getattr__,同上
# print(f1.type)
# print(f1[‘type‘]) # 有此属性,打印__getitem__,说明触发了__getitem__

item系列

原文:https://www.cnblogs.com/xuewei95/p/14717644.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!