IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python中的property用法 -> 正文阅读

[Python知识库]python中的property用法

property用法的用法主要有两点:
一、将方法当做属性来使用
二、将属性设置为只读
下面的例子,给Student类设置了三个私有属性,我们以其中一个属性__score为例,在访问__score时,先要set,然后get才能使用这个属性。如果类似的属性较多,我们就要写很多这样的方法,而且如果需要调用的地方较多,当有很多这些方法的时候,后期维护也很麻烦,先看下面的例子:

class Student:
    __slots__ = ('__name', '__age', '__score')

    def __init__(self, name, age, score=0):
        self.__name = name
        self.__age = age
        self.__score = score

    def getscore(self):
        # print(self.__score)
        return self.__score

    def setscore(self, score):
        if not isinstance(score, int):
            raise ValueError('Score必须是int类型!')
        if score < 0 or score > 100:
            raise ValueError('Score值必须在0=<score<=100')
        self.__score = score


stu = Student("wuli", 28)
stu.setscore(88)
print(stu.getscore())
输出结果:
88

为了解决上面提到的问题,我们可以使用property装饰器,这样就可以把property修饰的方法当做属性来使用,需要的时候直接赋值就可以了,同时,还可以通过这种方法对用户输入的数据做相应的校验。看下面的例子:

class Student(object):
    __slots__ = ('__name', '__age', '__score')

    def __init__(self, name, age, score=0):
        self.__name = name
        self.__age = age
        self.__score = score

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

    @score.setter
    def score(self, score):
        if not isinstance(score, int):
            raise ValueError('Score必须是int类型!')
        if score < 0 or score > 100:
            raise ValueError('Score值必须在0=<score<=100')
        self.__score = score

    @property
    def name(self):
        return self.__name

    @name.setter
    def name(self, name):
        if not isinstance(name, str):
            raise ValueError('name必须是str类型!')
        self.__name = name

    @property
    def age(self):
        return self.__age

    @age.setter
    def age(self, age):
        if not isinstance(age, int):
            raise ValueError('Score必须是int类型!')
        self.__age = age
     
stu = Student("化学", 28)
stu.score = 88
print(stu.score)
print(stu.name)
stu.name = "政治"
print(stu.name)
stu.score = 12
print(stu.score)

输出结果:
88
化学
政治
12

注意事项:
1、属性名与方法名一定要区分开,不然会进入死循环(self._age,def age())
2、实例化的对象使用属性时,不是调用属性(stu._age),而是用的方法名(stu.age)
3、@property其实就是实现了getter功能; @xxx.setter实现的是setter功能;还有一个 @xxx.deleter实现删除功能
4、定义方法的时候 @property必须在 @xxx.setter之前,且二者修饰的方法名相同(age())
5、如果只实现了 @property(而没有实现@xxx.setter),那么该属性为 只读属性

二、用property修饰方法后,可以做到变量变为只读,只能在初始化的时候赋值,其他地方不能赋值,只能调用读取其值。
代码示例:
以属性__age为例来演示

class Student:
    __slots__ = ('__name', '__age', '__score')

    def __init__(self, name, age, score=0):
        self.__name = name
        self.__age = age
        self.__score = score

    def getscore(self):
        # print(self.__score)
        return self.__score

    def setscore(self, score):
        if not isinstance(score, int):
            raise ValueError('Score必须是int类型!')
        if score < 0 or score > 100:
            raise ValueError('Score值必须在0=<score<=100')
        self.__score = score

    @property
    def age(self):
        return self.__age

stu = Student("wuli", 110)
print(stu.age)

输出结果:
110

在上面的示例中,我们只能读取在初始化的时候给age的赋值(110),不能对其直接赋值,不然会报错。还是以上面的代码为例:

stu.age = 90
print(stu.age)

输出结果:
  File "xxx/prop.py", line 43, in <module>
    stu.age = 90
AttributeError: can't set attribute

以上仅为学习记录使用,如有侵权,告知删除。

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-10-01 16:48:38  更:2021-10-01 16:49:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 17:16:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码