python中关于property的最详细使用方法

作者:lecboyECNU 时间:2023-07-23 15:35:26 

为什么要写这篇文章

其实是因为最近学到了python的property装饰器的相关知识,刚开始学得云里雾里,于是乎,看了许多相关博客,不巧,大概是自己基础不太好吧,真心感觉许多人写的太过深奥,而且不是很全面。于是本人花了整整一下午实验,现在将关于property的相关知识分享出来。如有错误之处,还望各位不吝赐教!

什么是property装饰器

顾名思义,这是一个装饰器,起到一个辅助作用,具体理解请看下面一个例子。我们知道,程序中有许多变量都有范围的限制,比如年龄,工资,身高等不可能为负数。但是用户输入时,有时会不可避免地输入非法的值,如果我们的程序没有一个判断,那么极有可能导致整个程序崩溃!因此,我们常常会写一些set(),get()等函数来判断,但常常会过于麻烦,这时,便出现了property装饰器,它既有判断的功能,而且非常简洁。

set()和get()的使用


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装饰器。

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,二者必须一致。

来源:https://blog.csdn.net/m0_51658577/article/details/115418801

标签:python,property,使用
0
投稿

猜你喜欢

  • 使用JavaScript和CSS实现文本隔行换色的方法

    2024-04-19 09:46:52
  • numpy数组做图片拼接的实现(concatenate、vstack、hstack)

    2022-10-23 15:21:21
  • python中设置超时跳过,超时退出的方式

    2023-12-25 01:38:20
  • mysql每半小时平均值计算的sql语句

    2024-01-18 19:39:56
  • python 名称空间与作用域详情

    2021-06-10 23:12:38
  • 一文详解Golang协程调度器scheduler

    2024-04-30 10:05:58
  • python抓取网页内容示例分享

    2022-04-25 19:02:56
  • 用ASP显示ACCESS数据库的GIF图象

    2008-11-16 18:09:00
  • TensorFlow人工智能学习张量及高阶操作示例详解

    2022-04-15 15:37:52
  • PHP.vs.JAVA

    2023-11-17 20:28:51
  • tensorflow实现KNN识别MNIST

    2021-08-10 06:41:50
  • 初步探究Python程序的执行原理

    2022-11-06 10:30:20
  • 邮箱正则表达式实现代码(针对php)

    2024-05-03 15:48:55
  • 网页设计之关于素材和言志

    2008-03-23 13:46:00
  • Python爬虫工具requests-html使用解析

    2021-10-23 02:20:27
  • Python 字符串换行的多种方式

    2021-06-01 09:04:58
  • 基于TensorBoard中graph模块图结构分析

    2021-01-11 16:58:52
  • Python中的Selenium异常处理

    2021-08-28 04:15:23
  • MySql中的longtext字段的返回问题及解决

    2024-01-12 23:32:41
  • 用js判断页面刷新或关闭的方法(onbeforeunload与onunload事件)

    2024-04-30 08:55:07
  • asp之家 网络编程 m.aspxhome.com