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
 同一属性的三个函数名要相同哦。。

时间: 2024-10-25 21:39:06

python学习之@property的相关文章

Python学习之property

Python中使用Property函数可以将类中的函数当作属性来调用. 案例 1 __metaclass__=type 2 class Rectangle: 3 def __init__(self): 4 self.width=0 5 self.height=0 6 def setSize(self,size): 7 self.width,self.height=size 8 def getSize(self): 9 return self.height,self.width 10 size=p

[读书]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

[python学习] 介绍python的property,以及为什么要用setter,一个小栗子

python中的property是比较好用的. 先来一段代码 #-*- coding:utf-8 -*- class C(object): status_dict = { 1: 'accept', 2: 'reject' } def __init__(self): self._x = 1 @property def status(self): return self.status_dict[self._x] @status.setter def status(self, val): if val

Python学习的个人笔记(基础语法)

Python学习的个人笔记 题外话: 我是一个大二的计算机系的学生,这份python学习个人笔记是趁寒假这一周在慕课网,w3cschool,还有借鉴了一些博客,资料整理出来的,用于自己方便的时候查阅,一开始保存在word上,代码不是很好看,于是决定复制到博客里面,可能有复制过程中出错的,或者我本身在理解方面有出错的地方,希望能得到指正,谢谢  后续的内容我会继续学习…… python下载地址  www.python.org Python 分为2.7和3.3两个版本,3.3有些库不兼容,因此用2.

Python学习记录day3

Python学习记录 day3 今天是银角大王武sir讲课.先回顾了上节课所学,然后讲到了面向对象思想. set set是一个无序且不重复,可嵌套的元素集合 class set(object):     """     set() -> new empty set object     set(iterable) -> new set object     Build an unordered collection of unique elements.     

Python学习手册笔记

之前为了编写一个svm分词的程序而简单学了下Python,觉得Python很好用,想深入并系统学习一下,了解一些机制,因此开始阅读<Python学习手册(第三版)>.如果只是想快速入门,我在这里推荐了几篇文章,有其他语言编程经验的人简单看一看就可以很快地开始编写Python程序了. 黑体表示章节, 下划线表示可以直接在原文对应位置查到的专有技术名词. 原书配套答案请到http://www.hzbook.com/Books/4572.html下载,简单注册即可. 第三章 如何运行程序 impor

《Python学习手册》读书笔记【转载】

转载:http://www.cnblogs.com/wuyuegb2312/archive/2013/02/26/2910908.html 之前为了编写一个svm分词的程序而简单学了下Python,觉得Python很好用,想深入并系统学习一下,了解一些机制,因此开始阅读<Python学习手册(第三版)>.如果只是想快速入门,我在这里推荐了几篇文章,有其他语言编程经验的人简单看一看就可以很快地开始编写Python程序了. 黑体表示章节, 下划线表示可以直接在原文对应位置查到的专有技术名词. 原书

Python学习手冊笔记

之前为了编写一个svm分词的程序而简单学了下Python.认为Python非常好用.想深入并系统学习一下,了解一些机制,因此開始阅读<Python学习手冊(第三版)>. 假设仅仅是想高速入门.我在这里推荐了几篇文章,有其它语言编程经验的人简单看一看就能够非常快地開始编写Python程序了. 黑体表示章节. 下划线表示能够直接在原文相应位置查到的专有技术名词. 原书配套答案请到http://www.hzbook.com/Books/4572.html下载,简单注冊就可以. 第三章 怎样执行程序

Python学习笔记-面向对象

一.什么是面向对象的程序设计 1.面向过程的程序设计 面向过程:核心是过程二字,过程即解决问题的步骤,就是先干什么,再干什么.基于该思想写程序就好比在设计一条流水线,是一种机械式的思维方式. 优点:复杂的过程流程化,进而简单化 缺点:扩展性差 2.面向对象的程序设计 面向对象:核心是对象二字,对象是特征与技能的结合体.基于该思想编写程序就好比在创造一个世界,世界是由一个个对象组成,是一种"上帝式"的思维方式 优点:可扩展性强 缺点:编程复杂度高,容易出现过度设计问题 二.类与对象 对象