其实是因为最近学到了python的property装饰器的相关知识,刚开始学得云里雾里,于是乎,看了许多相关博客,不巧,大概是自己基础不太好吧,真心感觉许多人写的太过深奥,而且不是很全面。于是本人花了整整一下午实验,现在将关于property的相关知识分享出来。如有错误之处,还望各位不吝赐教!
顾名思义,这是一个装饰器,起到一个辅助作用,具体理解请看下面一个例子。我们知道,程序中有许多变量都有范围的限制,比如年龄,工资,身高等不可能为负数。但是用户输入时,有时会不可避免地输入非法的值,如果我们的程序没有一个判断,那么极有可能导致整个程序崩溃!因此,我们常常会写一些set(),get()等函数来判断,但常常会过于麻烦,这时,便出现了property装饰器,它既有判断的功能,而且非常简洁。
class A:
def set_age(self, age):
if 0 < age < 120:
self.age = age
else:
print("非法的年龄!默认为18")
self.age = 0
def get_age(self):
return self.age
a = A()
a.set_age(19)
print(a.age)
a.set_age(180)
print(a.age)
结果如下:
19
非法的年龄!默认为18
0
不可否认,这样确实达到了我们想要的效果,事实上,Java语言就是这样实现的。但是python具有更简洁的表达,就是property装饰器。
class A:
@property
def age(self):
return self._age
@age.setter
def age(self, age):
if 0 < age < 120:
self._age = age
else:
self._age = 18
print("非法的年龄!默认为18")
a = A()
a.age = 19
print(a.age)
a.age = 180
print(a.age)
这里的@property相当于get()方法,@age.setter相当于set()方法。
1.property装饰器将set()和get()方法变成了属性!可以用 .age 来设置值,不需要用括号,方便更改。
2.增加了新的功能------只读,如果你只写@property而不写@age.setter,那么这个变量就是只读的,重新赋值则会报错。增加了程序的安全性。
3.注意到property修饰的是私有成员,而私有成员本来相对来说更安全一点,这体现了代码的一致性。
1.如果你要使修饰的成员只读,则必须在定义时就设置好值,否则会报错。
2.property装饰器只能修饰私有成员,如果修饰非私有成员,则会报循环的错误。结果确实是这样,但原因不太清楚,烦请大佬们不吝赐教!
3.setter前的变量必须是property修饰的变量,如本例中是age,二者必须一致。
希望这篇文章能够帮助到您!
打字不易,如果这篇文章有帮助到您,我非常开心!同时也希望您能不吝地点一个赞,说不定会帮助到更多的人。
欢迎所有朋友们批评指正,谢谢!
Grafana Tempo 是一个新的开源、大容量分布式跟踪后端。 Grafana 的 Tempo 是出...
第一种方法、浏览器设置兼容模式 打开IE,点击“工具”菜单,选择“兼容性视图设...
了解如何在 Bash 中编写定制程序以自动执行重复性操作任务。 Unix 最初的希望之...
这里是WMP的版本ClassID,从WMP7后ID就成了clsid: 6BF52A52-394A-11D3-B153-00C0...
A7的第一个博客 一自我介绍 大家好我是来自陕西科技大学2019级电子科学与技术的...
java的基本数据类型与运算符 这里写目录标题 java的基本数据类型与运算符 数据类...
戳蓝字“ CSDN云计算 ”关注我们哦 作者 |?江子抑 转自 |?编程拯救世界 ? 主要思...
按照惯例,先来段废话:CKEditor是新一代的FCKeditor,是一个重新开发的版本。CK...
为什么这期要叫暴力爬虫呢因为笔者认为基于selenium方法非常的简单粗暴理由有两...
SVG (Scalable Vector Graphics) 可缩放矢量图,是一种基于XML语法的图像格式。...