python property函数

Property

在早期的python版本中,当我们对类的属性进行操作时,会调用一些像__getattr__()、setattr__()的特殊方法,如果我们有大量的属性时,这些方法会变得很臃肿。

如果我们的类有私有属性,那么在类外就不能通过.运算符直接访问该属性。需要定义一些get/set方法对属性进行操作。那么有没有比较优雅便捷的方式去访问它们呢,我们可以使用python中的property函数。我们可以看下面的类。

class PropertyTest(object):

    def__init__(self):

        self.__name = None         

       

    defgetName(self):

        print'---in getName---'

        returnself.__name

   

    defsetName(self,value):

        print'---in setName---'

        self.__name = value

       

    defdelName(self):

        print'---in delName---'

        delself.__name

       

 nameNicky =property(getName,setName,delName,doc ='create an attribute nameNicky')

 

a= PropertyTest()

printa.nameNicky

a.nameNicky= 'kitty'

print a.nameNicky

print PropertyTest.nameNicky.__doc__

del a.nameNicky

在这个类中property函数接受类的方法作为参数,创建了一个属性nameNicky,用来处理类的私有特性__name。这样的话我们就可以通过nameNicky很方便的操作__name

当我们获取nameNicky的值时,会调用getName方法,当我们对nameNicky进行赋值时会调用setName方法,而当我们删除nameNicky时会调用delName方法,我们还可以给属性添加文档说明。

此外,我们还可以使用装饰器来实现上面的功能:

class PropertyTest(object):

    def__init__(self):

        self.__name = 'primary'

            

    @property 

    defnameNicky(self):

        print'---in getName---'

        returnself.__name

   

    @nameNicky.setter

    defnameNicky(self,value):

        print'---in setName---'

        self.__name = value

       

    @nameNicky.deleter   

    defnameNicky(self):

        print'---in delName---'

       delself.__name

a= PropertyTest()

print a.nameNicky

a.nameNicky = 'middle'

print a.nameNicky

del a.nameNicky

需要注意的是,属性nameNicky的三个方法要同名。而且此时我们只能通过“.”运算符访问nameNicky.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值