必威体育Betway必威体育官网
当前位置:首页 > IT技术

property

时间:2019-10-19 18:13:26来源:IT技术作者:seo实验室小编阅读:84次「手机版」
 

property

s = Student()
s.score = 9999
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:
            raise ValueError('score must between 0 ~ 100!')
        self._score = value
>>> s = Student()
>>> s.set_score(60) # ok!
>>> s.get_score()
60
>>> s.set_score(9999)
Traceback (most recent call last):
  ...

ValueError: score must between 0 ~ 100!

class Student(object):

    @property
    def score(self):
        return self._score

    @score.setter
    def 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
>>> s = Student()
>>> s.score = 60 # OK,实际转化为s.set_score(60)
>>> s.score # OK,实际转化为s.get_score()
60
>>> s.score = 9999
Traceback (most recent call last):
  ...
ValueError: score must between 0 ~ 100!

第一部分为最初的,对score赋任何值都行,显然不合理,第二部分是一种改进,但这样调用的时候麻烦,在第三部分我们用到property函数,它的作用是将函数作为属性调用。第三部分的一个等价表达是:

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:
            raise ValueError('score must between 0 ~ 100!')
        self._score = value
    score = property(get_score, set_score)
>>> s = Student()
>>> s.score = 60 # OK,实际转化为s.set_score(60)
>>> s.score # OK,实际转化为s.get_score()
60
>>> s.score = 9999
Traceback (most recent call last):
  ...
ValueError: score must between 0 ~ 100!
实际上property的语法为property(fget, fset, fdel, doc),实例如下
class C(object):
    def __init__(self):
        self._x = None
 
    def getx(self):
        return self._x
 
    def setx(self, value):
        self._x = value
 
    def delx(self):
        del self._x
 
    x = property(getx, setx, delx, "I'm the 'x' property.")
如果 c 是 C 的实例化, c.x 将触发 getter, c.x = value 将触发 setter,del c.x 触发 deleter。

相关阅读

使用System.getProperty()

System.getProperty(“参数”); 参数 取得内容 user.name 用户的账户名称 user.home 用户的主目录 user

System.getProperty()

很多时候我们需要在项目中读取外部属性文件,用到了System.getProperty("")方法。这个方法需要配置JVM系统属性,那么如何配置呢? 那就

C#自定义PropertyGrid属性

网络转载,原文来自:http://blog.csdn.net/lxping1012/article/details/7073944最近用到了PropertyGrid,原来从来没用到过,拿在手里,一

关于属性描述符PropertyDescriptor

本文首发于本博客 猫叔的博客,转载请申明出处 前言 感谢GY丶L粉丝的提问:属性描述器PropertyDescriptor是干嘛

js中hasOwnProperty()的作用

hasOwnProperty:是用来判断一个对象是否有你给出名称的属性或对象。不过需要注意的是,此方法无法检查该对象的原型链中是否具有该属

分享到:

栏目导航

推荐阅读

热门阅读