如何让属性类创建真正的属性?

问题描述 投票:0回答:1

使用描述符来管理属性:

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)

用真实属性初始化

Geeks
age
10:

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

实例

boy
包含真实属性
age

几乎每本书中,都使用
property
类来管理
age
属性(有些以
self.__age
self.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
_age
age
的代理,它是一种虚拟属性。我在用
RecursionError创建真实的
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):
         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
或类似的东西?

python-3.x class attributes
1个回答
0
投票
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}
© www.soinside.com 2019 - 2024. All rights reserved.