iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python中property属性的作用是什么
  • 363
分享到

Python中property属性的作用是什么

2023-06-30 00:06:48 363人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

本篇内容主要讲解“python中property属性的作用是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python中property属性的作用是什么”吧!前言Python 动态属性的概念

本篇内容主要讲解“python中property属性的作用是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习Python中property属性的作用是什么”吧!

前言

Python 动态属性的概念可能会被面试问到,在项目当中也非常实用,但是在一般的编程教程中不会提到,可以进修一下。

先看一个简单的例子。创建一个 Student 类,我希望通过实例来获取每个学生的一些情况,包括名字,成绩等。成绩只有等到考试结束以后才会有,所以实例化的时候不会给它赋值。

class Student:    def __init__(self, name):        self.name = name        self.score = Nonemike = Student('mike')

考试完以后,准备给 mike 打分:

mike.score = 999

在这里,老师一不小心多打了个 9 ,通常来说打分都是 100 分值,999 是一个非法数据,不应该赋值成功。学生一多,老师打分出现手误的情况肯定会越来越多,所以我们必须想办法修改程序,限制 score 的值必须在 0-100 分。

限制值

我们定义一个方法,如果输入的不是 0-100 的整数,就让程序报错,数据合法,我们就把 score 属性修改成功。

def set_score(self, new_score):    if not isinstance(new_score, int):        raise ValueError('score must be int')    if 0 <= new_score <= 100:        self.score = new_score        return self.score    else:        raise ValueError('score invalid')

这样我们每次需要获取成绩的时候使用 self.score 获取,修改成绩的时候调用函数来修改:

mike.set_score(999)

调用以后会报错,因为 999 是非法数据。注意,这个时候我使用 self.score 还是可以进行设置,而且不报错:

self.score = 999

这显然是不行的。所以我们要提供一种机制,把 score 变成私有属性,不能让外部访问。很遗憾,python 的私有属性是伪私有。通常我们把 _ 开头的属性叫私有属性,但是这只是一种协议和规定,你看到下划线开头的属性,不要去访问了。你硬要访问,是可以的,python 并不会禁止。

使用 @property 的方式代替。

上面的方法虽然实现了功能,但是改变了属性的使用方式。平常是这样使用的:

# 获取属性a = mike.score# 设置属性mike.score = 99@propertydef score(self):    return self._score@score.setterdef score(self, new_score):    if not isinstance(new_score, int):        raise ValueError('score must be int')        if 0 <= new_score <= 100:            self._score = new_score            return self._score        else:            raise ValueError('score invalid')

动态属性的好处

  • 统一了调用方式。self.score = 99 的方式,而不是函数调用的方式。

  • _score 我们就不直接去使用了。你要用也可以,不建议。

  • 如果我们一个属性只可以读,把 setter 部分注释掉就可以了。

现在我们来完善这个类,添加 birth 属性和年龄属性:

from datetime import datetimeclass Student:    def __init__(self, name, birth=1920):        self.name = name        self._score = None        self.birth = birth        self.age = datetime.now().year - self.birthmike = Student('mike')print(mike.birth)print(mike.age)
  • birth 和 age 这两个是可以根据一个求出另外一个的。存在数据冗余问题。

  • age 属性这样是有问题的。mike 初始化的时候,age 已经被求出来了,如果我在下一年再去访问 age 属性,那他就是个错误的值。可以通过把 age 设成现在的秒数来验证:

    self.age = datetime.now().secondmike = Student('mike')time.sleep(5)print(mike.age)print(datetime.now().second)

动态显示

@propertydef age(self):    return datetime.now().year - self.birth

注意,这里不要去设置 @age.setter ,因为他是动态变化的,你修改了会造成数据不一致,它只能作为一个只读属性。

@property 作用和应用场景:

  • @property 优化了属性读取和设置的可读性

  • 需要限制属性的特征;

  • 只读属性。如果属性只可以读,不可以写,用起来很方便。

  • 这个属性根据一个变化的环境动态改变。

附:用property代替getter和setter方法

>>>class Watermelon():       def __init__(self,price):           self._price = price                  #私有属性,外部无法修改和访问       def get_price(self):           return self._price       def set_price(self,new_price):           if new_price > 0:               self._price = new_price           else:               raise 'error:价格必须大于零'

用property代替getter和setter

>>>class Watermelon():       def __init__(self,price):           self._price = price       @property                          #使用@property装饰price方法       def price(self):           return self._price       @price.setter                      #使用@property装饰方法,当对price赋值时,调用装饰方法       def price(self,new_price):           if new_price > 0:               self._price = new_price           else:               raise 'error:价格必须大于零' >>> watermelon = Watermelon(4)>>> >>> watermelon.price4>>> >>> watermelon.price = 7>>> >>> watermelon.price7

到此,相信大家对“Python中property属性的作用是什么”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: Python中property属性的作用是什么

本文链接: https://www.lsjlt.com/news/326788.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python中property属性的作用是什么
    本篇内容主要讲解“Python中property属性的作用是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python中property属性的作用是什么”吧!前言Python 动态属性的概念...
    99+
    2023-06-30
  • Python中@property的作用是什么
    本篇文章给大家分享的是有关Python中@property的作用是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、使用@property优点将类方法转换为类属性,可以用来...
    99+
    2023-06-15
  • Python中property属性的用处详解
    目录前言限制值使用 @property 的方式代替。动态属性的好处动态显示附:用property代替getter和setter方法总结前言 Python 动态属性的概念可能会被面试问...
    99+
    2024-04-02
  • python中@Property属性如何使用
    这篇文章主要介绍“python中@Property属性如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“python中@Property属性如何使用”文章能帮助大家解决问题。一、前言本文介绍的属...
    99+
    2023-07-02
  • python中@Property属性使用方法
    目录一、前言二、创建用于计算的属性三、为属性添加安全保护机制一、前言 本文介绍的属性与类属性和实例属性不同。类属性和实例属性介绍的属性将返回所存储的值。而本文要介绍的属性是一种特殊的...
    99+
    2024-04-02
  • Python中property标签属性怎么使用
    在Python中,可以使用@property装饰器来定义一个属性的getter方法,并使用@property.setter装饰器来定...
    99+
    2023-09-16
    Python
  • css属性中float属性的作用是什么
    本教程操作环境:Windows10系统、CSS3版、DELL G3电脑css属性中float属性的作用是什么?float,css的一种属性,主要属性值为:left(左浮动)、none(不浮动)、right(右浮动)、inherit(继承父元...
    99+
    2023-05-14
    float css
  • Python Property装饰器的作用是什么
    本篇内容介绍了“Python Property装饰器的作用是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. property装饰器的...
    99+
    2023-06-15
  • css中的transition-property属性怎么用
    小编给大家分享一下css中的transition-property属性怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!  ...
    99+
    2024-04-02
  • python中的@property是什么
    这篇文章主要讲解了“python中的@property是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python中的@property是什么”吧! 说明内置的@propert...
    99+
    2023-06-20
  • CSS中的@property特性是什么
    小编给大家分享一下CSS中的@property特性是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!什么是csscss是一种用来表现HTML或XML等文件样式的...
    99+
    2023-06-14
  • vue中mixins属性的作用是什么
    本篇文章给大家分享的是有关vue中mixins属性的作用是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。mixin.js 文件import...
    99+
    2024-04-02
  • CSS中cssfilter属性的作用是什么
    CSS的filter属性用于对元素进行图像处理和效果,可以实现一些常见的图像处理操作,如模糊、亮度调整、对比度调整、灰度化、反转、色...
    99+
    2023-09-15
    CSS
  • VB.NET中DateTime属性的作用是什么
    本篇文章为大家展示了VB.NET中DateTime属性的作用是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。属性Date:返回一个DateTime值,显示日期。   Day:...
    99+
    2023-06-17
  • js中offsettop属性的作用是什么
    offsetTop属性返回的是一个元素相对于其offsetParent元素的顶部偏移量(即元素顶部边缘与offsetParent元素...
    99+
    2023-10-24
    js
  • C#中useshellexecute属性的作用是什么
    在C#中,UseShellExecute属性是一个bool类型的属性,用于指定是否使用操作系统的 Shell 执行的方式来运行进程。...
    99+
    2024-02-29
    C#
  • vb中wordwrap属性的作用是什么
    在VB中,WordWrap属性用于设置控件是否自动换行。 当WordWrap属性设置为True时,控件中的文本会自动换行,以适应控件...
    99+
    2023-10-28
    vb
  • CSS中margin属性的作用是什么
    这篇文章主要介绍“CSS中margin属性的作用是什么”,在日常操作中,相信很多人在CSS中margin属性的作用是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”CSS中...
    99+
    2024-04-02
  • HTML5 中placeholder属性的作用是什么
    HTML5 中placeholder属性的作用是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。HTML代码<input type...
    99+
    2024-04-02
  • CSS 中margin 属性的作用是什么
    这篇文章给大家介绍CSS 中margin 属性的作用是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。CSS margin 属性定义margin 属性是用于在一个声明中设置四个外边距...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作