python descriptor

python descriptor主要对类的静态属性进行定制化设置,在赋值或者获取值时做一些初始化处理。


class RevealAccess(object):
    """A data descriptor that sets and returns values
       normally and prints a message logging their access.
    """


    def __init__(self, initval=None, name='var'):
        self.val = initval
        self.name = name


    def __get__(self, obj, objtype):
        print 'Retrieving', self.name
        return self.val


    def __set__(self, obj, val):
        print 'Updating' , self.name
        self.val = val




class MyClass(object):
    x = RevealAccess(10, 'var "x"')
    y = 5


if __name__ == '__main__':
    m = MyClass()
    print m.x


    m.x = 20


    print m.x


    print m.y


    n = MyClass()
    print n.x


    n.x = 30


    print n.y


    print m.x

输出结果:

Retrieving var "x"
10
Updating var "x"
Retrieving var "x"
20
5
Retrieving var "x"
20
Updating var "x"
5
Retrieving var "x"
30

一般情况下,对象会优先使用对象属性

示例:
class t(object):
 a=4
 def __init__(self):
   self.a = 5
   self.b = 8

>>>l = t()
>>>l.__dict__
{'a': 5, 'b': 8}
>>>l.a = 5

如果class t中未定义slef.a,则l.a为4



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值