在面向对象编程的时候,我们定义一个Person

class Person:
def __init__(self):
self.age = 22

这样写法能够方便的访问属性age,

p = Person()
print p.age ==>22
p.age = 30
print p.age ==>30

这样写起来虽然很简单,但是没有参数检验(eg,输入非数值,输入过大的数值)。

写过Java的人知道,在Java有一种类叫做实体类(entity,javabean等),它们一般不提供其他复杂的方法只提供简单的gettersetter等方法。如下例子

public class person{
private int age;
public String getAge()
{
return this.age;
}
public String setAge(String age)
{
if(age > 100) {}//数值检验
return this.age=age;
}
}

同理我们可以按照这个思路来编写python代码

class Person:
def __init__(self):
self.age = None
def get_age(self):
return self.age
def set_age(self,age):
if not isinstance(age, int):
raise ValueError('age must be an integer!')
if age < 0 or age > 100:
raise ValueError('age must between 0 ~ 100!')
self.age = age

这样写就完善很多,参数不会被随意更改了。访问age的时候需要使用p.get_age(),但这种写法不够pythonic,强大的python提供了@property方法,方法如下

class Person(object):
def __init__(self):
self._age = None
@property
def age(self):
return self._age
@age.setter
def age(self,_age):
if not isinstance(_age, int):
raise ValueError('age must be an integer!')
if _age < 0 or _age > 100:
raise ValueError('age must between 0 ~ 100!')
self._age = _age
p=Person()

这里面有一点需要注意,就是在自定义类的时候需要使用新式类,即继承了object

python的属性(property)使用的更多相关文章

  1. python静态属性@property、类方法@classmethod、静态方法@staticmethod和普通方法

    静态属性:即将类的函数通过@property属性封装,封装后实例调用该函数时,不再需要在函数后面加(),而是用类似调用数据属性的方式直接调用函数名称即可执行函数. 静态属性既可以访问类的属性,也可以访 ...

  2. python描述符(descriptor)、属性(property)、函数(类)装饰器(decorator )原理实例详解

     1.前言 Python的描述符是接触到Python核心编程中一个比较难以理解的内容,自己在学习的过程中也遇到过很多的疑惑,通过google和阅读源码,现将自己的理解和心得记录下来,也为正在为了该问题 ...

  3. python中的property属性

    目录 1. 什么是property属性 2. 简单的实例 3. property属性的有两种方式 3.1 装饰器方式 3.2 类属性方式,创建值为property对象的类属性 4. property属 ...

  4. day26 python学习 对象的接口,封装,私用属性 property

    # 抽象类和接口类 #** #不崇尚接口类 #python本身支持多继承,没有接口专用的语法.但是我知道接口的概念 # 接口类:# 是规范子类的一个模板,只要接口类中定义的,就应该在子类中实现# 接口 ...

  5. Python——私有化 和 属性property

    Python——私有化 和 属性property 一.私有化 xx: 公有变量 _x: 单前置下划线,私有化属性或方法,from somemodule import *禁止导入,类对象和子类可以访问 ...

  6. 第7.26节 Python中的@property装饰器定义属性访问方法getter、setter、deleter 详解

    第7.26节 Python中的@property装饰器定义属性访问方法getter.setter.deleter 详解 一.    引言 Python中的装饰器在前面接触过,老猿还没有深入展开介绍装饰 ...

  7. python基础知识(属性property)

    属性property property               !=          类属性和实例属性 访问计算后所得的值           返回所存储的值 创建用于计算的属性 @proper ...

  8. python基础——使用@property

    python基础——使用@property 在绑定属性时,如果我们直接把属性暴露出去,虽然写起来很简单,但是,没办法检查参数,导致可以把成绩随便改: s = Student() s.score = 9 ...

  9. python中的property

    提示:这篇博文参考了两个博客,第一篇博文地址为:https://www.cnblogs.com/Lambda721/p/6132206.html,另一篇博文地址如下:关于python的property ...

随机推荐

  1. China Azure中部署Kubernetes(K8S)集群

    目前China Azure还不支持容器服务(ACS),使用名称"az acs create --orchestrator-type Kubernetes -g zymtest -n kube ...

  2. System.UnauthorizedAccessException 错误

    给目录添加 "Authenticated Users" 这个用户的 读写权限

  3. 使用Maven Archetype插件构建Maven工程原型模板

    创建原型模板 1.在空目录运行archetype:generate上面的命令,待下载完必要的jar包后,首先需要输入内置的原型编号: 1 Choose archetype: 2 1: internal ...

  4. 本地git部署web连接azure的git存储库

    ​​​本地git部署web 创建本地存储仓库 输入以下命令创建git本地仓库(会在当前目录下生产一个.git的目录) git init 然后提交内容 在git仓库所在的目录下存放好需要的网页文件 将文 ...

  5. This package contains perl-5.16.3, java8, nifi-1.1.2 on ubuntu:14.04

    [How to build:]cd /home/ops/work/demo/docker/aws/srctouch Dockerfiledocker build -t aws_src_image:v1 ...

  6. IntelliJ IDEA(二) :面板介绍

    一.面板说明 IDEA面板的全貌如下图 二.菜单栏 下面会简单介绍下一些常用的部分菜单使用,如有疑问或补充欢迎留言. (1).File文件 1. New:新建一个工程 可以新建project,导入已存 ...

  7. HDU1541--Stars(树状数组)

    Stars Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  8. mysql的explain

    explain 一般用于分析sql.  如下 [SQL] 纯文本查看 复制代码 ? 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 2 ...

  9. 修复mysql表

    1>用"repair table"方式修复语法:repair table 表名 [选项]选项如下:QUICK 用在数据表还没被修改的情况下,速度最快EXTENDED 试图去恢 ...

  10. 剑指Offer_11_旋转数组的最小数字

    题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出一个旋转数组的最小元素. 例如: {3,4,5,1,2} 为 {1,2,3,4,5} ...