当前位置: 首页 > 知识库问答 >
问题:

python3.x - property管理的属性是虚拟属性?

冷涵忍
2023-08-06
class Geeks:     def __init__(self,value):          self._age = value       def get_age(self):         return self._age            def set_age(self, value):         self._age = value      age = property(get_age, set_age) 

创建了一个类,里面的age属性由property进行管理。

boy = Geeks(10)boy.age10boy.__dict__{'_age': 10}

你看字典里面的值是_age不是age,如果修改类

class Geeks:     def __init__(self,value):          self.age = value       def get_age(self):         return self.age            def set_age(self, value):         self.age = value      age = property(get_age, set_age) 

boy = Geeks(10)将无限循环。

共有1个答案

马弘和
2023-08-06
class Geeks:     def __init__(self,value):          self.age = value       def get_age(self):         return self.age            def set_age(self, value):         self.age = value      age = property(get_age, set_age) 

这段代码把 age = property(get_age, set_age) 换个写法就是:

class Geeks:    def __init__(self, value):        self.age = value    def get_age(self):        return self.age    def set_age(self, value):        self.age = value        # 改写    @property    def age(self):        return self.age    @age.setter    def age(self, val):        self.age = val

这样会造成命名空间污染,当实例和类属性命名相同,且是描述符的时候,描述符在属性查找的优先级上最高。所以当你用 book = Geeks(10) 的时候,执行了 self.age = value,其实就等于一直在调用:

def set_age(self, value):    # 实例化的时候会调用这个描述符    self.age = value    # 调用这行又是调用 set_age 这个函数

所以你会一直不断的死循环。参考这个答案解释: https://segmentfault.com/q/1010000044061650?_ea=312080437

 类似资料:
  • 了解virtual属性 virtual是虚拟属性的意思,即原来Schema定义里是不存该属性,后来通过virtual方法赋予的属性。可以这样理解,Schema定义的属性是要保存到数据库里,而virtual属性基于已有属性做的二次定义,这样可以提供更好的语义上的处理。 模型属性 = Schema定义的属性 + virtual属性 下面举几个例子 实例1 需求是根据手机号和邀请码来判断该用户是否是有

  •  属性可以像变量那样进行读写,但实际上,在读写时会像调用函数那样调用设置函数 ( setter ) 和读取函数 ( getter ) 。设置函数 和 读取函数有时也被称为 属性控制器。  定义格式如下。 property标识符 { setter(参数) { //这里是设定函数的内容 } getter() { //这里是读取函数的内容 return表达式;//读取函数的返回值 } }  把 sett

  • 本文向大家介绍Python 类,property属性(简化属性的操作),@property,property()用法示例,包括了Python 类,property属性(简化属性的操作),@property,property()用法示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python 类,property属性(简化属性的操作),@property,property()用法。分享给

  • Ant构建文件是用XML编写的,它不允许像你喜欢的编程语言那样声明变量。 但是,正如您可能想象的那样,如果Ant允许声明项目名称,项目源目录等变量,那将非常有用。 Ant使用property元素,允许您指定属性。 这允许将属性从一个构建更改为另一个或从一个环境更改为另一个。 默认情况下,Ant提供以下可在构建文件中使用的预定义属性 - Sr.No. 属性和描述 1 ant.file 构建文件的完整

  • 问题内容: 在詹金斯中是否有任何“适当”的方法来更改系统属性?更改它们的最简单/最快的方法是什么?例如,我需要关闭无用的(在我的情况下)ping线程。 问题答案: 如果您确实想要快速简单的方法来更改系统属性,则可以使用脚本控制台 但这不会在重新启动后幸存下来。要使其永久,请将设置添加到java args。对于我(CentOS,Jenkins 2.7.1)而言,这大约是一半(对于其他发行版,我认为是

  • 熟悉使用 Vagrant 管理虚拟机的流程。 查看状态 如果你已经登录到了虚拟机上,先退出来。在命令行下看到下面提示符就表示你已经登录到虚拟机上了: [[email protected] ~]$ 输入命令: exit 应该会返回: logout Connection to 127.0.0.1 closed. 现在你的位置应该是在项目的根目录下面,先查看一下虚拟机的状态: vagrant st