码迷,mamicode.com
首页 > 编程语言 > 详细

Python学习(十三)--@property和property函数

时间:2018-07-08 15:38:51      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:href   www   back   com   学习   style   直接   rop   原理   

  • @property
        @property装饰器可以把一个方法变成属性调用。
 
        举一个例子,对学生成绩进行设置和查询。通过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:
            raise ValueError(score must between 0 ~ 100!)
        self._score = value
 
然后通过@property装饰器重新修改后:
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!
 
        把一个getter方法变成属性,只需要加上@property。@property本身又创建了另外一个装饰器@score.setter,把一个setter方法变成属性赋值。
 
 
 
  • property函数
        property函数的原理和@property很相似,它有四个参数。
        property(fget=None, fset=None, fdel=None, doc=None)
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(fget=get_score, fset=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!
 
 
参考:

Python学习(十三)--@property和property函数

标签:href   www   back   com   学习   style   直接   rop   原理   

原文地址:https://www.cnblogs.com/mujiujiu/p/9280000.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!