Python中的property属性
大家好,我是大爆炸
在介绍@property前先介绍property()。
property() 构造函数返回property属性。其语法是: property(fget=None, fset=None, fdel=None, doc=None)
property()参数: fget (optional) - 用于获取属性值,默认为None。 fset (optional) - 用于设置属性值,默认为None。 fdel (optional) - 用于删除属性值。默认为None。 doc (optional) - 包含该属性的文档(docstring)的字符串。默认为None。
property()返回值:
property()从给定的getter、setter和deleter返回property属性。 如果没有给出参数,property()返回一个不包含任何getter、setter或deleter的基属性属性。 如果没有提供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 的名称。
我们还设置: getter方法 get_name() 来获取人员的姓名, setter方法 set_name() 来设置人员的姓名, deleter方法 del_name() 来删除人员的姓名。
通过调用property()方法来设置一个新的属性 name 。
如程序所示,内部引用 p.name 调用get_name() 作为getter , set_name() 作为setter , del_name() 作为deleter ,通过方法内部的打印输出。
示例2:使用@property装饰器
可以使用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() 。 首先,指定 name() 方法也是Person的一个属性。这是通过在getter方法之前使用@property来实现 的。 接下来, 使用属性名来指定setter和deleter 。这是通过使用@name 完成的。@name.setter用于setter方法,@name.deleter用于deleter方法。
在定义getter、setter和deleter时,使用了相同的方法name()。现在,无论何时使用 p.name,它都会在内部调用相应的getter、setter和deleter。
对于鸿蒙系统你应该知道这些对于鸿蒙系统你应该知道这些无意中看到怎么一个见解,对于鸿蒙系统,谈之前我们不应该忽视,华为的用户群体。华为主要是用户群体和年龄段我们都清楚。他不是小米那种年轻化偏极客群体,所以小米
谷歌官宣除名华为,鸿蒙准备就绪,三足鼎立成型文黑科技小喇叭原创原创不易,禁止抄袭,违者必究!说起手机操作系统,谷歌的安卓和苹果的iOS长期垄断着全球市场,更诧异的是,这两者均来自美国。近年来,华为与美国的矛盾日渐加剧,如今,
一款几乎什么都能的机皇机一加9Pro一个月体验报告一加9系列不出意外就是一加历代机型中关注度最高的一代。从与哈苏合作,到请来周迅胡歌作为品牌代言人,微博热搜榜多次出现一加的身影。关注度高,自然也就会引来更多人更全面地对产品的审视。
大疆发布旗下最轻无人机仅87g支持室内避障日前,DJIEducation平台带来了一款全新无人机RoboMasterTellTalent(简称TT),价格为239美元(约合人民币1536元)。其三围尺寸为9892。541毫
快播王欣创业接连遇挫,因投资比特币身家或超百亿快播创始人王欣的一举一动,都颇受媒体关注。昨日,王欣在自己的家乡成立了一家公司,这家公司名为郴州淇澳信息技术服务有限公司,注册资本200万元,主要提供互联网物联网服务,涵盖人工智能
明日起,微信将不再提供这项服务日前,微信开放社区宣布,2021年5月20日之后不再提供,小程序打开App技术服务。微信称,微信小程序为开发者提供了打开App的技术服务,希望通过开发者的合理应用,能为微信用户提供
监管再次明确虚拟货币非法先说下马斯克的瓜吧,这几天消息不断,乱糟糟的。特斯拉没啥可说的,事故频出,加上不说人话不干人事的公关方式,相当于亲手给国产同行赠送市场份额,我估计那几个老板正偷着乐呢。其实特斯拉目
64家芯片巨头加入美半导体联盟,整个供应链不再中立中国在近年来发展迅速,经济实力和国际影响力都得到了良好的提升。随着中国的崛起,也招致了不少嫉妒的目光,以美国为首的西方国家一再将中国视为威胁,采取了一系列手段企图阻碍中国的发展。事
1500以下买手机不想失望就选它们小编上篇文章和大家分享了两款在1500以下,适合大众的真香机。为了让大家有更多的选择空间,小编决定再推荐两款供大家参考。iQOOZ1x(5G)这是一部发布于去年的杰作,也是去年千元
粤港澳大湾区知名快充工厂大盘点在前不久,充电头网介绍了粤港澳大湾区为什么是快充之都,并且先后发布了充电器工厂氮化镓快充工厂充电宝工厂户外电源工厂无线充工厂车充工厂等多篇有关快充工厂的统计文章。在最新的统计中,充
历代变化最大的Android12来啦!设计界面大翻新新功能报给你知GoogleIO2021开发者大会正式登场,第一波介绍当然是跟大家最为相关的Android12啦!官方正式公开Android12的完整细节,并释出了Beta版供大众使用。这一代界面