返回顶部
首页 > 资讯 > 后端开发 > Python >python特性--property
  • 277
分享到

python特性--property

特性pythonproperty 2023-01-30 22:01:45 277人浏览 独家记忆

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

摘要

在定义一个类的时候,有时我们需要获取一个类的属性值,而这个属性值需要经过类中的其他属性运算来获得的。那么很容易,只要我们在类中定义一个方法,并且通过调用方法可以获取到那个需要运算的属性值。那么,问题来了,当有一天需求变了,你需要反向操作你

在定义一个类的时候,有时我们需要获取一个类的属性值,而这个属性值需要经过类中的其他属性运算来获得的。那么很容易,只要我们在类中定义一个方法,并且通过调用方法可以获取到那个需要运算的属性值。那么,问题来了,当有一天需求变了,你需要反向操作你之前实现的类,你需要通过传入那个需要运算得来的值来获取参与运算的属性值。显然,我们需要重新定义很多的函数来获取那些属性值。这样的类是很不友好的,其他人在调用你定义的类,需要做大量的修改。那么有没有什么解决的办法呢?python提供了一样东西:特性(property)。property避免了以上的问题,使得调用类的人只要知道类怎么用就可以了,而不用了解它是怎么实现的。这很好的实现了面向对象语言的封装性。

这样说来还是有点抽象,那么到底怎么用呢?我下面以一个例子说明property的用法。

以购买水果为例

先粘贴一段代码:

class Fruits:
    def __init__(self):
        self.name = 'apple'
        self.percost = 0.5
        self.color = 'red'
        self.num = 0

    def set_money(self,money):
       self.num = money/self.percost

    def get_money(self):
        return self.percost*self.num

    money = property(get_money,set_money)

 

我定义一个水果类,初始化水果的名称为apple,单个价格(percost)为0.5元,个数(num)为0。我还定义了get_money方法,用于获取付钱的金额

接下来我们实例化fruit,并为num赋值为10,即要买十个苹果,那么我们想获得需要付多少钱的时候,只要通过调用get_money就可以了。但是奇怪的是,我为什么可以通过直接用fruit.money就可以获得实际的付款金额呢?先别急,接下来慢慢解释。我先往下讲。

读者会发现,我还定义了一个set_money函数和类属性money,那么它们究竟有什么用?从property的参数可以知道,有一个是get_money,就会我们上面想获得的付款金额。通过将get_money传入property函数获得结果赋值给money。那么我们就可以在实例对象中直接通过属性(即fruit.money)的形式来获取付款金额了。

那么set_money又有什么用呢?这就是我文章开头所说的,当有一天需求变了,需要对类的实例对象进行反向操作的时候,我们怎么有效减少代码的数量,提高效率。这个set_money可以使我们在通过fruit.money传入付款金额的时候,接下来通过fruit.num来获取购买的苹果数量。是不是很神奇?

具体的代码实现和结果可以看下面我截出来的两张图。

  

结果:

 

一个property函数就可以有如此大的威力,即可以正向操作,由可以反向操作。那么它是如何实现的呢?

   通过阅读源码,可以知道,property函数其实质上是一个类,传入的参数有4个,即fget,fset,fdel和doc。分别对应于获取属性值,设置属性值,删除属性值和文档字符串。他们一起定义了所谓的描述符协议。

 

实际上,这个类包含了一些魔法方法,这些魔法方法为_ _set_ _,_ _get_ _,_ _del_ _。分别在类的属性的设置,获取和删除的时候自动调用。那么可以理解,上面我们定义的get_money,set_money方法,其实内部是调用了上面的魔法方法。当我们在设置fruit.num的时候,自动就会调用set_money方法,那么就会返回我自己写的方法的值,即ruturn self.percost * self.num的结果。反过来,我在设置fruit.money的时候,就会自动调用set_money方法,同样通过我定义的方法,获得了水果的个数,即self.num。那么就可以通过fruit.num轻而易举地获得这个计算出来的个数量了。通过将set_money和get_money方法作为参数传入property函数,我们就可以随时获得想要的结果。在不同的情况获取不同的计算值。

特性property是一个强大的函数,虽然它的内部实现原理很简单,但在实际应用中,笔者认为还是很有用处的。就如我上面所说的需求下,用property可以很好地解决一些问题。更多的用途还需要在实践中去慢慢思考和体会。

 

--结束END--

本文标题: python特性--property

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

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

猜你喜欢
  • python特性--property
    在定义一个类的时候,有时我们需要获取一个类的属性值,而这个属性值需要经过类中的其他属性运算来获得的。那么很容易,只要我们在类中定义一个方法,并且通过调用方法可以获取到那个需要运算的属性值。那么,问题来了,当有一天需求变了,你需要反向操作你...
    99+
    2023-01-30
    特性 python property
  • CSS中的@property特性是什么
    小编给大家分享一下CSS中的@property特性是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!什么是csscss是一种用来表现HTML或XML等文件样式的...
    99+
    2023-06-14
  • python中的property及属性与特性之间的优先权
    目录 前言属性(attribute)属性的定义属性的用法特性(property)特性的定义特性的用法特性的使用场景属性和特性之间的差别和联系属性和特性之间的优先权 ...
    99+
    2024-04-02
  • python中@Property属性使用方法
    目录一、前言二、创建用于计算的属性三、为属性添加安全保护机制一、前言 本文介绍的属性与类属性和实例属性不同。类属性和实例属性介绍的属性将返回所存储的值。而本文要介绍的属性是一种特殊的...
    99+
    2024-04-02
  • python中@Property属性如何使用
    这篇文章主要介绍“python中@Property属性如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“python中@Property属性如何使用”文章能帮助大家解决问题。一、前言本文介绍的属...
    99+
    2023-07-02
  • Python3 property属性
    python3中的property有一个很有意思的功能,它能将类中的方法像类属性一样调用!class property(fget=None, fset=None, fdel=None, doc=None)我们先来简单了解一下这个proper...
    99+
    2023-01-31
    属性 property
  • Python中property属性的用处详解
    目录前言限制值使用 @property 的方式代替。动态属性的好处动态显示附:用property代替getter和setter方法总结前言 Python 动态属性的概念可能会被面试问...
    99+
    2024-04-02
  • python3--面向对象的三大特性:封装,property,classmethod,staticmethod
    python中的封装隐藏对象的属性和实现细节,仅对外提供公共访问方式好处:1 将变化隔离2 便于使用3 提供复用性4 提高安全性封装原则1 将不需要对外提供的内容都隐藏起来2 把属性都隐藏,提供公共方法对其访问私有变量和私有方法在pytho...
    99+
    2023-01-30
    三大 面向对象 特性
  • Python中property标签属性怎么使用
    在Python中,可以使用@property装饰器来定义一个属性的getter方法,并使用@property.setter装饰器来定...
    99+
    2023-09-16
    Python
  • Python中property属性的作用是什么
    本篇内容主要讲解“Python中property属性的作用是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python中property属性的作用是什么”吧!前言Python 动态属性的概念...
    99+
    2023-06-30
  • Python @property 详解
    本文讲解了 Python 的 property 特性,即一种符合 Python 哲学地设置 getter 和 setter 的方式。 Python 有一个概念叫做 property,它能让你在 Python 的面向对象编程中轻松不少。...
    99+
    2023-01-30
    详解 Python property
  • python中@property和pro
    1、基本的@property使用,可以把函数当做属性用 class Person(object): @property def get_name(self): print('我叫xxx') def...
    99+
    2023-01-30
    python property pro
  • Python学习之property
    Python中使用Property函数可以将类中的函数当作属性来调用。 案例 1 __metaclass__=type 2 class Rectangle: 3 def __init__(self): 4 ...
    99+
    2023-01-30
    Python property
  • python使用@property @x
    @property可以将python定义的函数“当做”属性访问,从而提供更加友好访问方式,但是有时候setter/deleter也是需要的。 1》只...
    99+
    2023-01-31
    python property
  • Python 高级特性
    这章有关Python中被认为高级的特性——就是说并不是每个语言都有的,也是说它们可能在更复杂的程序或库中更有用,但不是说特别特殊或特别复杂。 强调这点很重要:这一章仅仅关于语言自身——关于辅之以Python的标准库功能的特殊语法所支持的特...
    99+
    2023-01-31
    特性 高级 Python
  • Python--高级特性
    高级特性生成器读取生成器元素的两种方式:•g.next()•for循环读取; (生成器实质上是可迭代对象);•列表生成式(列表生成式是Python 内置的非常简单却强大的可以用来创建 list的生成式), 当生成时元素即打印, 会占用内存;...
    99+
    2023-01-31
    特性 高级 Python
  • Python十大特性
    目录1.Python2.Python 编程语言的特性3.开源4.Python 中的 GUI 编程支持5.Python 支持高级语言6.可扩展性7.可移植性8.大型标准库9.解释性语言...
    99+
    2024-04-02
  • Python的@property的使用
    目录1、几个概念2、举个例子3、解决问题4、换个方法通常,当我们需要对对象的敏感属性或者不希望外部直接访问的属性进行私有化,但是某些时候我们又需要对这些私有属性进行修改,该怎么处理呢...
    99+
    2024-04-02
  • python @property用法作用
    @property广泛应用在类的定义中,可以让调用者写出简短的代码,同时保证对参数进行必要的检查,这样,程序运行时就减少了出错的可能性。详见链接:廖雪峰python3使用@property练习请利用@property给一个Screen对象加...
    99+
    2023-01-31
    作用 python property
  • python的特性 - 切片
    概述 前面我们知晓,有些数据类型可以直接使用索引index来访问序列中的元素,同时索引还可以分为正向和负向的。Python中的切片操作,也会用到索引。而且切片非常灵活,可以很方便地对有序序列进行切片操作,使用频率非常高。 一、切片介绍...
    99+
    2023-01-31
    切片 特性 python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作