python-3.x 如何使属性类创建真实的的属性?

a11xaf1n  于 2023-08-08  发布在  Python
关注(0)|答案(1)|浏览(107)

使用描述符管理属性:

class Geeks:
    def __init__(self,value):
        self.age = value
    def __getattribute__(self,attr):
        return  object.__getattribute__(self,attr)
    def __setattr__(self,attr,value):
        return  object.__setattr__(self, attr,value)

字符串
使用真实的属性age 10初始化Geeks类:

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


示例boy包含一个真实的属性age
几乎在每本书中,都使用property类来管理age属性(有些是self.__ageself.age_self._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)
boy.age
10
boy.__dict__
{'_age': 10}


真实属性是_age,不是age_ageage的代理,是一种虚拟属性。我在用property(get_age, set_age)创建真实的age属性时遇到过RecursionError

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


相同错误:

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


如何使property(get_age, set_age)创建真实的的属性age,而不是_age或类似的东西?

3bygqnnd

3bygqnnd1#

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

字符串
Geeks可以创建一个真实的的属性,属性名称与__dict__中的相同。

boy = Geeks(10)
in set
boy.age
in get
10
boy.__dict__
{'age': 10}

相关问题