您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > Python

Python中的property属性

时间:2021-12-31 16:13:26  来源:  作者:python大爆炸

大家好,我是大爆炸

在介绍@property前先介绍property()。

property()构造函数返回property属性。其语法是:

property(fget=None, fset=None, fdel=None, doc=None)

property()参数:

  1. fget (optional) - 用于获取属性值,默认为None。
  2. fset (optional) - 用于设置属性值,默认为None。
  3. fdel (optional) - 用于删除属性值。默认为None。
  4. doc (optional) - 包含该属性的文档(docstring)的字符串。默认为None。

property()返回值:

property()从给定的getter、setter和deleter返回property属性。

  1. 如果没有给出参数,property()返回一个不包含任何getter、setter或deleter的基属性属性。
  2. 如果没有提供doc,property()接受getter函数的文档字符串。

示例1:使用getter、setter和deleter创建属性

class Person:
    def __init__(self, name):
        self._name = name

    def get_name(self):
        print('Getting name')
        return self._name

    def set_name(self, value):
        print('Setting name to ' + value)
        self._name = value

    def del_name(self):
        print('Deleting name')
        del self._name

    # Set property to use get_name, set_name
    # and del_name methods
    name = property(get_name, set_name, del_name, 'Name property')

p = Person('Adam')
print(p.name)
p.name = 'John'
del p.name

结果:

Getting name
The name is: Adam
Setting name to John
Deleting name

这里,_name被用作私有变量,用于存储Person的名称。

我们还设置:

  1. getter方法get_name()来获取人员的姓名,
  2. setter方法set_name()来设置人员的姓名,
  3. deleter方法del_name()来删除人员的姓名。

通过调用property()方法来设置一个新的属性name。

如程序所示,内部引用p.name调用get_name()作为getter, set_name()作为setter, del_name()作为deleter,通过方法内部的打印输出。

示例2:使用@property装饰器

可以使用Python/ target=_blank class=infotextkey>Python装饰器@property来分配getter、setter和deleter,而不是使用property()。

class Person:
    def __init__(self, name):
        self._name = name

    @property
    def name(self):
        print('Getting name')
        return self._name

    @name.setter
    def name(self, value):
        print('Setting name to ' + value)
        self._name = value

    @name.deleter
    def name(self):
        print('Deleting name')
        del self._name

p = Person('Adam')
print('The name is:', p.name)
p.name = 'John'
del p.name

输出:

Getting name
The name is: Adam
Setting name to John
Deleting name

这里使用了@property装饰器,而不是property()。

  1. 首先,指定name()方法也是Person的一个属性。这是通过在getter方法之前使用@property来实现的。
  2. 接下来,使用属性名来指定setter和deleter。这是通过使用@name完成的。@name.setter用于setter方法,@name.deleter用于deleter方法。

在定义getter、setter和deleter时,使用了相同的方法name()。现在,无论何时使用 p.name,它都会在内部调用相应的getter、setter和deleter。



Tags:property属性   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
大家好,我是大爆炸在介绍@property前先介绍property()。property()构造函数返回property属性。其语法是:property(fget=None, fset=None, fdel=None, doc=None)property()参数...【详细内容】
2021-12-31  Tags: property属性  点击:(142)  评论:(0)  加入收藏
1. 什么是property属性一种用起来像是使用的实例属性一样的特殊属性,可以对应于某个方法# ############### 定义 ###############class Foo: def func(self): pass # 定义pro...【详细内容】
2019-08-30  Tags: property属性  点击:(265)  评论:(0)  加入收藏
▌简易百科推荐
近几年 Web3 被炒得火热,但是大部分人可能还不清楚什么是 Web3,今天就让w3cschool编程狮小师妹带你了解下 Web3 是什么?与我们熟知的 Web1 和 Web2 又有什么区别呢?web3.0什么是...【详细内容】
2022-07-15  编程狮W3Cschool    Tags:Web3.0   点击:(2)  评论:(0)  加入收藏
1、让我们一起来看下吧,直接上图。 第一眼看到是不是觉得很高逼格,暗黑画风,这很大佬。其实它就是------AidLearning。一个运行在安卓平台的linux系统,而且还包含了许多非常强大...【详细内容】
2022-07-15  IT智能化专栏    Tags:AidLearning   点击:(2)  评论:(0)  加入收藏
真正的大师,永远都怀着一颗学徒的心! 一、项目简介 今天说的这个软件是一款基于Python+vue的自动化运维、完全开源的云管理平台。二、实现功能 基于RBAC权限系统 录像回放 ...【详细内容】
2022-07-14  菜鸟程序猿    Tags:Python   点击:(3)  评论:(0)  加入收藏
前言今天笔者想和大家来聊聊python接口自动化的MySQL数据连接,废话不多说咱们直接进入主题吧。 一、什么是 PyMySQL?PyMySQL是在Python3.x版本中用于连接MySQL服务器的一个库,P...【详细内容】
2022-07-11  测试架构师百里    Tags:python   点击:(19)  评论:(0)  加入收藏
aiohttp什么是 aiohttp?一个异步的 HTTP 客户端\服务端框架,基于 asyncio 的异步模块。可用于实现异步爬虫,更快于 requests 的同步爬虫。安装pip install aiohttpaiohttp 和 r...【详细内容】
2022-07-11  VT漫步    Tags:aiohttp   点击:(15)  评论:(0)  加入收藏
今天我们学习下 Queue 的进阶用法。生产者消费者模型在并发编程中,比如爬虫,有的线程负责爬取数据,有的线程负责对爬取到的数据做处理(清洗、分类和入库)。假如他们是直接交互的,...【详细内容】
2022-07-06  VT漫步    Tags:Python Queue   点击:(34)  评论:(0)  加入收藏
继承:是面向对象编程最重要的特性之一,例如,我们每个人都从祖辈和父母那里继承了一些体貌特征,但每个人却又不同于父母,有自己独有的一些特性。在面向对象中被继承的类是父类或基...【详细内容】
2022-07-06  至尊小狸子    Tags:python   点击:(25)  评论:(0)  加入收藏
点击上方头像关注我,每周上午 09:00准时推送,每月不定期赠送技术书籍。本文1553字,阅读约需4分钟 Hi,大家好,我是CoCo。在上一篇Python自动化测试系列文章:Python自动化测试之P...【详细内容】
2022-07-05  CoCo的软件测试小栈    Tags:Python   点击:(27)  评论:(0)  加入收藏
第一种方式:res = requests.get(url, params=data, headers = headers)第二种方式:res = requests.get(url, data=data, headers = headers)注意:1.url格式入参只支持第一种方...【详细内容】
2022-07-05  独钓寒江雪之IT    Tags:Python request   点击:(19)  评论:(0)  加入收藏
什么是python类的多态python的多态,可以为不同的类实例,或者说不同的数据处理方式,提供统一的接口。用比喻的方式理解python类的多态比如,同一个苹果(统一的接口)在孩子的眼里(类实...【详细内容】
2022-07-04  写小说的程序员    Tags:python类   点击:(28)  评论:(0)  加入收藏
相关文章
站内最新
站内热门
站内头条