@property

  • @property是内置的装饰器,与普通装饰器原理是一样的,只不过返回的不是函数,而是类对象.
  • @property负责把一个方法变成属性进行调用,保证对参数进行必要的检查。
  • 属性有三个装饰器:settergetterdeleter。当属性只有getter方法,则为只有只读属性。否则为可读写属性。

定义一个类:

class Student(object):def __init__(self,score):self.__score = score      ## __score 翻译成 _Student__score# 允许外部代码获取scoredef get_score(self):print('%s'%self.__score)return self.__score

上述例子中,在绑定属性的时候,直接把属性暴露出去,导致可以随意修改,但是对score的修改又没有做校验限制等。
为了限制属性,例如score的范围,可以通过一个set_score()方法来设置成绩,再通过一个get_score()来获取成绩。
例如:

class Student(object):def get_score(self):return self.score def set_score(self,value):if not isinstance(value,int):         # 先判断输入字符的类型raise ValueError('score must be an integer')if value <0 or value >100:         # 输入的int数据,判断输入的范围raise ValueError('score must between 0 -100 ')self.score = value

试运行:

>>> s = Student()            # 不需要s=Student(60),因为没有init方法
>>> s.set_score (60)
>>> s.get_score()
60
>>> s.set_score(101)
Traceback (most recent call last):File "<stdin>", line 1, in <module>File "<stdin>", line 8, in set_score
ValueError: score must between 0 -100

所以,有没有既能检查参数,又可以用类似属性这样简单的方式来访问、判断类的变量呢?
是否还记得装饰器decorator可以给函数动态加上功能?对于类的方法,装饰器一样起作用。

使用规则:

  • 只读属性:只有getter方法,在方法前加上@property;
  • 可读可写属性:有getter和setter方法,在setter方法上使用@属性名.setter。

例如:

class Student(object):# score:可读可写属性, getter与setter方法# 把一个getter方法变成属性,只需要加上@property就可以了@propertydef score(self):return self._score# 创建另一个装饰器@score.setter,负责把一个setter方法变成属性赋值@score.setterdef score(self,value):if not isinstance(value,int):raise ValueError('score must be an integer ! ')if value<0 or value>100:raise ValueError ('score must between 0 - 100 ! ')self.score = value# 定义只读属性,只定义getter方法@propertydef age(self):return self._age

❤ thanks for watching, keep on updating...
点个赞再走吧

Python - @property 方法变属性相关推荐

  1. python property方法_Python——property(使一个方法看起来就像类属性一样)

    """ 装饰器property: 使一个方法看起来就像类属性一样 """ #例子1 class A: def __init__(self, ...

  2. 技术图文:Python魔法方法之属性访问详解

    背景 今天在B站学习"零基础入门学习 Python"中的第45节"魔法方法:属性访问",这也是我们组织的 Python基础刻意练习活动 的学习任务,其中有这样的 ...

  3. Python 魔法方法与属性

    python的魔法方法很奇特,有些地方也称他为特殊方法.其结构是由两个下划线("_"开始中间名称最后以两个下划线("_")结束的特殊指定方法,这有点类似java ...

  4. Python使用property函数定义属性访问方法如果不定义fget会怎么样?

    我们知道Python使用property函数定义属性访问方法时的语法如下: 实例属性=property(fget=None, fset=None, fdel=None, doc=None) 而是要@p ...

  5. Python:__slots__()方法和@property方法

    1.__slots__ 1.python作为一个动态语言,可以在创建一个class类后,给类进行绑定属性和方法.但是当我们想要限制实例的属性和方法时怎么办?这个时候就可以用到__slots__()方法 ...

  6. 初学者python笔记(类的装饰器、property方法、元类)

    文章目录 上下文协议管理 类的装饰器基本原理 property方法的巧用 利用描述符自定制property property下的setter与deleter Python的元类 元类的概念 自定义元类 ...

  7. Python·@property属性

    一.property属性 property属性可以用来给属性添加约束,比如温度属性,我们不允许低于-273度:成绩属性,我们不允许0分以下等等.而且使用property属性,将来修改约束条件的时候也很 ...

  8. Python property函数:定义属性

    如果为 Python 类定义了 getter.setter 等访问器方法,则可使用 property() 函数将它们定义成属性(相当于实例变量). property() 函数的语法格式如下: prop ...

  9. python中文读音ndarray-numpy中的ndarray方法和属性详解

    NumPy数组的维数称为秩(rank),一维数组的秩为1,二维数组的秩为2,以此类推.在NumPy中,每一个线性的数组称为是一个轴(axes),秩其实是描述轴的数量.比如说,二维数组相当于是一个一维数 ...

最新文章

  1. css 形状_在CSS形状之外思考
  2. L2级自动驾驶量产趋势解读
  3. 服务器论坛有哪些_SEO工作中,经常使用的无效外链有哪些?
  4. Python 相对路径问题:“No such file or directory“,原因及解决方法
  5. openstack中的server
  6. 字符串是单一字符的无序组合吗_计算机二级教程 Python语言程序设计 第6章组合数据类型...
  7. JavaFX官方教程(五)之在JavaFX中创建表单
  8. 7个顶级资源网站,不知道就很可惜
  9. 检测精度大幅提升!移动端实时的NanoDet升级版NanoDet-Plus来了!
  10. IIS的变迁(IIS3, IIS4, IIS5, IIS6, IIS7)
  11. Office 2007中的config.xml个性定制说明
  12. .net中的装箱与拆箱!
  13. linux 进程创建 c语言,linux下进程创建的C语言程序
  14. 车联网TBOX国六OBD排放终端远程在线监控系统
  15. 硕士论文如何通过查重?
  16. 网页的登录和注册页面
  17. 【C++】定义一个求绝对值函数的模板,实现对不同数据类型的数求绝对值。
  18. 太空上新 | 张肇达 张凯惠:嫦娥奔月有了现实版
  19. 苹果手机怎么设置铃声?不用电脑,轻松搞定
  20. 【Linux命令】《鸟哥Linux基础》第十六章 进程管理与SELinux初探

热门文章

  1. 台式电脑如何截屏_如何选购台式电脑显卡?小白装机通俗易懂的独立显卡知识指南...
  2. mongoose知识点总结
  3. dom常用操作全后续会补充
  4. 河马 webshell扫描器对linux服务器进行安全扫描
  5. SpringSecurity权限框架实战
  6. 西南科技计算机在线自测,西南科技大学2017春季第一学期高等数学1在线自测答案...
  7. 多路由器环境配置的一些小技巧(达内)
  8. CentOS SSH安装与配置
  9. fiddler怎么修改服务器返回参数并发送
  10. Electron初步【02】--第一个Electron App