[读书]Python学习手册--属性管理1

属性管理-特性

一般开发这不必关心属性的实现,对工具的构建这来说,了解这一块对API的灵活性有帮助。
大多数情况下,属性位于对象自身之中,或者继承自对象所派生自的一个类。 ----python学习手册

property

property(fget=None, fset=None, fdel=None, doc=None) -> property attribute
fget is a function to be used for getting an attribute value, and likewisefset is a function for setting, and fdel a function for del’ing, an attribute.
可以使用函数的方式也可以使用装饰器的方式来使用

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#python2.7x
#property.py  @2014-07-26
#author: orangleliu

class Person(object):
    def __init__(self, name):
        self._name = name 
    
    def getName(self):
        print 'fetch....'
        return self._name
    
    def setName(self, value):
        print 'change...'
        self._name = value
    
    def delName(self):
        print 'remove....'
        del self._name
        
    #也可以使用装饰器的方式
    name = property(getName, setName, delName, "name property docs")
    
bob = Person('Bob')
print bob.name
print Person.name.__doc__
bob.name = 'bob'
print bob.name
del bob.name
#print bob.name

'''
并没有想象中的那么好使

#类没有继承object的情况下
fetch....
Bob
name property docs
bob
set del 就没有使用啊

#类继承object的情况下
Bob
name property docs
change...
fetch....
bob
remove....
'''


书中的例子并没有继承object, 使用2.7的版本和书中结果不一致。 需要继承object才能达到预期的结果

添加属性的默认操作

这里使用装饰的方式, 只要value赋值就进行一个默认的操作,可以看到我们使用属性的方式就可以默认调用函数来处理属性。g.value 而不是 g.valueXX()

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#python2.7x
#property.py  @2014-07-26
#author: orangleliu

class GetSquare(object):
    def __init__(self, num):
        self.value = num
        
    @property
    def value(self):
        return self._value
    
    @value.setter
    def value(self, num):
        self._value = num**2
        
'''
从上面可以看到set属性值的时候作了一些属性的某人动作,有时候很有必要
'''

g = GetSquare(4)
print g.value

g.value = 10 
print g.value


其实这种方式很类似于javabean中的方式。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值