python attr相关

# 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 {}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值