使用描述符管理属性:
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.__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
的代理,是一种虚拟属性。我在用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
或类似的东西?
1条答案
按热度按时间3bygqnnd1#
字符串
类
Geeks
可以创建一个真实的的属性,属性名称与__dict__
中的相同。型