python学习之@property

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python学习之@property相关的知识,希望对你有一定的参考价值。

@property 可以将Python定义的函数“当做”属性访问,从而提供更加友好访问方式,但是有时候setter/getter也是需要的,为什么需要这种把函数当作属性用的功能呢?

一是为了提供友好额访问方式,二是为了进行参数安全性的检查

如我定义了一个类A,其成员变量为a,想给a赋值,

var = A()

var.a = 10000---->这个值是可以随便填写的,不会进行该参数是否合法的检测,这个显然存在安全隐患,可以通过以下set_a(),get_a()的方法限制a的范围

class A(object):

    def get_a(self):

        retrun self._a


    def set_a(self):

        if not isintance(value, int):

            raise ValueError(‘a must be an integer‘)

       if a < 0:

            raise ValueError(‘a must be bigger than 0‘)

对于A的操作:

var = A()

var.set_a(12)--->这里没有直接范文属性

var.get_a()

12

var.set_a(-1)

......

ValueError:a must be bigger than 0


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

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

假设定义了一个类:C,该类必须继承自object类,有一私有变量_x
class C:
 def __init__(self):
  self.__x=None
  1.现在介绍第一种使用属性的方法:
  在该类中定义三个函数,分别用作赋值、取值和删除变量(此处表达也许不很清晰,请看示例)
 def getx(self):
  return self.__x
 def setx(self,value):
  self.__x=value
 def delx(self):
  del self.__x
 x=property(getx,setx,delx,‘‘)

property函数原型为property(fget=None,fset=None,fdel=None,doc=None),所以根据自己需要定义相应的函数即可。
  现在这个类中的x属性便已经定义好了,我们可以先定义一个C的实例c=C(),然后赋值c.x=100,取值y=c.x,删除:del c.x。是不是很简单呢?请看第二种方法
  2.下面看第二种方法(在2.6中新增)
  首先定义一个类C:
class C:
 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
 同一属性的三个函数名要相同哦。。


以上是关于python学习之@property的主要内容,如果未能解决你的问题,请参考以下文章

Python 学习之《Learn Python3 The Hard Way 》第五部分学习笔记

python学习之机器学习

Python 学习之《Learn Python3 The Hard Way 》第二部分学习笔记

Python 学习之《Learn Python3 The Hard Way 》第七部分学习笔记

Python 学习之《Learn Python3 The Hard Way 》第四部分学习笔记

Python 学习之《Learn Python3 The Hard Way 》第九部分学习笔记