博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python学习笔记-使用@property、setter、deleter
阅读量:5919 次
发布时间:2019-06-19

本文共 1555 字,大约阅读时间需要 5 分钟。

在python中,我们需要对外暴露一个成员变量的时候,我们往往需要对外部输入的值进行判断,以确保是符合我们的期望的。

class Student(object):    age = 20    student = Student()print student.agestudent.age = "hello"

上述这种写法虽然可以取到age属性,但是同时也可以对age设置任意值。所以并不合理。

那怎么解决了,我们可以把age变成私有的成员变量。然后写一个getter用于供外部取得age值;一个setter函数用于供外部设置age值,并对age值进行一定的判断。

例如:

class Student(object):    def __init__(self):        self._age = None    def age_getter(self):        return self._age    def age_setter(self, age):        if isinstance(age, str) and age.isdigit():            age = int(age)        else:            raise ValueError("age is illegal")        if isinstance(age,int):            self._age = age

那么我就需要student.age_getter()取得age,student.age_setter()设置age值。但是这样实现了功能,但是的确使得调用变得比较麻烦。有什么地方可以改进吗?

这个时候我们可以在gettersetter后面定义一个成员变量age。例如

age = property(age_getter, age_setter)

这样我们就可以把age当成一个Student的属性来调用和赋值了。

例如:

student.age = "20"print student.age

你觉得python只能这么写getter和setter了,那就图样图森破了。python还有逆天的装饰器来实现getter、setter、和deleter。

例如:

class Student(object):    def __init__(self):        self._age = None    @property    def age(self):        return self._age    @age.setter    def age(self, age):        if isinstance(age, int):            self._age = age            return        if isinstance(age, str) and age.isdigit():            age = int(age)            self._age = age        else:            raise ValueError("age is illegal")    @age.deleter    def age(self):        del self._agestudent = Student()student.age = 20print student.agedel student.age

上面的例子中用@property、x.setter x.deleter实现了属性的读取、赋值、和删除。当然您也可以只是实现其中的一个或者几个。

转载地址:http://ajbvx.baihongyu.com/

你可能感兴趣的文章
SANS:2013年度安全分析(日志管理)调查报告
查看>>
让Excel更聪明
查看>>
高性能的MySQL(2)单条SQL性能
查看>>
Nginx--简介
查看>>
sip2rtsp
查看>>
Exchange 2016 申请证书
查看>>
Python调用:'get_column_letter‘错误
查看>>
通过GlusterFS黏合多节点SSD剩余空间
查看>>
vmware 认证路线图
查看>>
Suse Cloud 2.0 官方部署文档
查看>>
路由基础(四)静态路由与SLA技术
查看>>
JAVA_类装载器
查看>>
Java培训第二周小结
查看>>
《IT蓝豹》完整阅读软件客户端app
查看>>
VC界面开发组件Xtreme Toolkit Pro全新发布v17.0.0|附下载
查看>>
dot.js 在函数中传递对象
查看>>
飞机游戏、俄罗斯方块、贪吃蛇C语言代码
查看>>
Linux基础 linux系统中的批量删除文件与空文件删除的命令介绍
查看>>
java System.exit(int status)使用
查看>>
环境变量配置文件
查看>>