Python学习(十三)[email protected]和property函数

  • @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!

参考:

https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386820062641f3bcc60a4b164f8d91df476445697b9e000

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

时间: 2024-10-12 22:01:37

Python学习(十三)[email protected]和property函数的相关文章

[email&#160;protected]&amp;@classmethod&amp;property的理解

#!/usr/bin/evn python #_*_coding:utf8_*_ class myClass(object): age = 30 def __init__(self,name): self.name = name def sayhi1(self):#只可实例中调用 print("sayhi1...name:{}.age:{}".format(self.name,self.age)) @staticmethod #静态方法不可访问构造方法中的变量,可在实例中调用,也可类中

python学习第三周(下 函数)

本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值  嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8.内置函数 温故知新 1. 集合 主要作用: 去重 关系测试, 交集\差集\并集\反向(对称)差集 2. 元组 只读列表,只有count, index 2 个方法 作用:如果一些数据不想被人修改, 可以存成元组,比如身份证列表 3. 字典 key-value对 特性: 无顺序 去重 查询速度快,比列表快多了 比list占用内存多 为什么会查询速度会快呢?

shell学习之[email&#160;protected] 与 $* 差在哪?

要说 [email protected] 与 $* 之前,需得先从 shell script 的 positional parameter 谈起... 我们都已经知道变量(variable)是如何定义及替换的,这个不用再多讲了. 但是,我们还需要知道有些变量是 shell 内定的,且其名称是我们不能随意修改的, 其中就有 positional parameter 在内.在 shell script 中,我们可用 $0, $1, $2, $3 ... 这样的变量分别提取命令行中的参数, 如ls -

python学习之第十六课时--函数的作用及定义

例子: 当我们知道半径r的值时,就可以根据公式计算出面积,假设我们需要计算3个不同大小的圆的面积: #!/usr/bin/env python # -*- coding:utf-8 -*- r1=2.34 r2=7.28 r3=10.32 s1=3.14*r1*r1 s2=3.14*r2*r2 s3=3.14*r3*r3 当代码有规律的重复的时候,每次写3.14*x*x不仅很麻烦,而且如果要把3.14改成3.14159的时候得全部替换 有了函数,我们不再每次写s=3.14*x*x,而是写成更有意

python装饰器[email&#160;protected]

@property 考察 Student 类: class Student(object): def __init__(self, name, score): self.name = name self.score = score 当我们想要修改一个 Student 的 scroe 属性时,可以这么写: s = Student('Bob', 59) s.score = 60 但是也可以这么写: s.score = 1000 显然,直接给属性赋值无法检查分数的有效性. 如果利用两个方法: clas

Python学习十三:map/reduce

map()和reduce()是Python内建的两个高阶函数.怎么理解他们呢? 用法: 1.map():map函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回. 2.reduce():reduce把一个函数作用在一个序列[x1, x2, x3-]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是: reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x

Python学习笔记__2.2章 定义函数

# 这是学习廖雪峰老师python教程的学习笔记 1.定义函数 定义一个函数需要有函数名.参数.函数体.函数体中最好还有 传入的参数判断 1.1.函数创建 定义一个函数用def,数据类型检查用isinstance.例子如下: def my_abs(x): if not isinstance(x, (int, float)):    # 判断传入的参数,是否是 ××× 或 浮点形 raise TypeError('bad operand type')  #  抛出错误 if x >= 0: ret

Python学习笔记__4.2章 返回函数

# 这是学习廖雪峰老师python教程的学习笔记 1.函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回. # 累加函数 def external(*args): def internal(): ax = 0 for n in args: ax = ax + n return ax return internal  # external的返回值是internal # 调用external() f = external(1, 3, 5, 7, 9)   #这里的 f是一

Python学习笔记__4.3章 匿名函数(简洁函数)

# 这是学习廖雪峰老师python教程的学习笔记 1.概览 关键字lambda表示匿名函数 list(map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9])) # 列表生成式中的 lambda 实际就是 def f(x): return x * x 但匿名函数有个限制,就是只能有一个表达式. 匿名函数不用写return,返回值就是该表达式的结果 匿名函数因为函数没有名字,不必担心函数名冲突. 此外,匿名函数也是一个函数对象,可以把匿名函数赋值给一个变量