zoukankan      html  css  js  c++  java
  • @property在python类中的应用

    1.在类中,有时需要限制输入的内容,可以用一个set来输入需要的内容,用get来取得输入的内容

    2.其实说白,上述所说的方法就是用来检查输入内容,让人们不能随心所欲的设置了。

    参见下面的例子:

    1 class Student(object):
    2     def get_score(self):
    3         return self.__score
    4     def set_score(self, value):
    5         if not isinstance(value, int):
    6             raise ValueError("score must be an integer!")
    7         if value < 0 or value > 100:
    8             raise ValueError("score must between 0 ~100")
    9         self.__score = value
    调用方法如下:
    >>>s = Student()
    >>>s.set__score(89)
    >>>s.get_score()
    89

    虽然上面的函数可以检查参数,但是略显复杂。没有直接调用属性的这么简单直接。

    有没有既检查参数,又可以用类似属性这样的简单的方法来访问类的变量。万能的python来说,这是可以解决的。。。。

    Python内置的@property装饰器就是负责把一个方法变成属性的。

    方法如下:

     1 class Student(object):
     2     @property
     3     def score(self):
     4         return self._score                     ###(getter方法)
     5     @score.setter                              ###(@property装饰器本身又创建了另外一个装饰器,@score.setter)
     6     def score(self, value):
     7         if not isinstance (value, int):
     8             raise ValueError("score must be an integer")
     9         if value < 0 or value > 100:
    10             raise ValueError("score must be between 0~100")
    11         self._score = value                    ###(setter方法)
    调用方法如下:
    >>>s = Student()
    >>>s.score = 60
    >>>s.score
    60

    ###利用@property还可以只定义只读属性,既只定义getter方法;

    setter方法可以认为是可写属性

    ### 注意@property的位置

  • 相关阅读:
    并发编程(2)-进程、并发和并行讲解
    并发编程(5)-管道、数据共享、进程池
    并发编程(4)-进程中的锁、信号量、 事件和队列
    人工智能及数学运算的基础方法
    并发编程(3)-进程模块
    判断一个数是否是水仙花数
    js中隐式类型转换测试
    webpack使用webpack-dev-middleware进行热重载
    网页打包安卓APP流程
    「postgres」查看数据库连接数
  • 原文地址:https://www.cnblogs.com/lmt921108/p/7581945.html
Copyright © 2011-2022 走看看