# coding=utf-8_
_author__ = "leaves"
# item相关的函数与[]调用相关 attr相关的函数与.调用相关
class myAttr():
name = {};
def __call__(self, key): # 用于实例自身的调用,()调用的效果
try:
print('My Attr is %s.' % self[key])
return self[key]
except KeyError:
return None
def __getitem__(self, key):
print '__getitem__'
return self.name[key]
def __setitem__(self, key, value):
print '__setitem__'
self.name[key] = value
def __delitem__(self, key):
print '__delitem__'
del self.name[key]
def __getattr__(self, key):
print '__getattr__'
return self.name[key]
def __setattr__(self, key, value):
print '__setattr__'
self.name[key] = value
def __delattr__(self, key):
print '__delattr__'
del self.name[key]
def __str__(self):
return 'My attr is %s' % self.name
__repr__ = __str__
print'---------------1--------------'
s = myAttr()
print'---------------2--------------'
s['key'] = 'value'
print'---------------3--------------'
print s['key'] # 调用__call__
print'---------------4--------------'
del s['key']
print'---------------5--------------'
s('key')
print'---------------6--------------'
s.key = 'value2'
print'---------------7--------------'
print s.key
print'---------------8--------------'
print hasattr(s, 'key')
print'---------------9--------------'
del s.key
print'---------------10--------------'
# print s.key 调用__getattr__报错
print hasattr(myAttr, 'key')
print'---------------11--------------'
print s
输出:
---------------1--------------
---------------2--------------
__setitem__
---------------3--------------
__getitem__
value
---------------4--------------
__delitem__
---------------5--------------
__getitem__
---------------6--------------
__setattr__
---------------7--------------
__getattr__
value2
---------------8--------------
__getattr__
True
---------------9--------------
__delattr__
---------------10--------------
False
---------------11--------------
My attr is {}