A006: Python之@property属性

 

Python之@property属性

@property 可以将python定义的函数“当做”属性访问,从而提供更加友好访问方式,但是有时候setter/getter也是需要的

假设定义了一个类Cls,该类必须继承自object类,有一私有变量__x

1. 第一种使用属性的方法:

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

#!/usr/bin/env python

# -*- coding: utf-8 -*-

# blog.ithomer.net

 

class Cls(object):

    def __init__(self):

        self.__x = None

     

    def getx(self):

        return self.__x

     

    def setx(self, value):

        self.__x = value

         

    def delx(self):

        del self.__x

         

    x = property(getx, setx, delx, 'set x property')

 

if __name__ == '__main__':

    c = Cls()

    c.x = 100

    y = c.x

    print("set & get y: %d" % y)

     

    del c.x

    print("del c.x & y: %d" % y)

运行结果:

set & get y: 100
del c.x & y: 100

在该类中定义三个函数,分别用作赋值、取值、删除变量

property函数原型为property(fget=None,fset=None,fdel=None,doc=None),上例根据自己定义相应的函数赋值即可。


2. 第二种方法(在2.6中新增)
同方法一,首先定义一个类
Cls,该类必须继承自object类,有一私有变量__x

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

class Cls(object):

    def __init__(self):

        self.__x = None

         

    @property

    def x(self):

        return self.__x

     

    @x.setter

    def x(self, value):

        self.__x = value

         

    @x.deleter

    def x(self):

        del self.__x

 

if __name__ == '__main__':

    c = Cls()

    c.x = 100

    y = c.x

    print("set & get y: %d" % y)

     

    del c.x

    print("del c.x & y: %d" % y)

运行结果:
set& get y: 100

delc.x & y: 100
说明: 同一属性__x的三个函数名要相同。

 

3. 第三种方法(类不继承object类)

就不需要setter 等属性,@property只需要read, set, del 方法。

 

class Parrot:

    def __init__(self):

        self._voltage =100000

 

    @property

    def voltage(self):

       """Get the current voltage."""

        returnself._voltage

 

if __name__ == "__main__":

    # instance

    p = Parrot()

    # similarly invoke"getter" via @property

    print p.voltage

    # update, similarlyinvoke "setter"

    p.voltage = 12

 

参考:

http://www.2cto.com/kf/201402/278575.html

http://blog.csdn.net/u011148275/article/details/21577613

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值