Python 3.x 在课堂上正确使用属性
你能解释一下为什么这个简单的属性不起作用吗Python 3.x 在课堂上正确使用属性,python-3.x,Python 3.x,你能解释一下为什么这个简单的属性不起作用吗 class Person: def __init__(self): self.person = listing def _set_listing(self): self._listing = {'a':'ok','b':'no','c':'yes'} listing = property(_set_listing) i=Person() 返回错误 NameError:name“listing”
class Person:
def __init__(self):
self.person = listing
def _set_listing(self):
self._listing = {'a':'ok','b':'no','c':'yes'}
listing = property(_set_listing)
i=Person()
返回错误
NameError:name“listing”未在
\uuuu init\uuuuu
中定义,它是一个未定义的局部变量,不是对Person
对象的列表
属性的引用。那将是self.listing
属性有一个不返回任何内容的getter,因此它隐式返回None
,因此Person()。我认为那不是你想要的
看起来您正试图定义属性的setter方法,如下所示
class Person:
def __init__(self):
self.listing = 1
def _set_listing(self, value):
self._listing = {'a':'ok','b':'no','c':'yes', 'value': value}
def _get_listing(self):
return self._listing
listing = property(_get_listing, _set_listing)
print(Person().listing['value']) # 1
或(使用属性
装饰器)
谢谢Patrick,它工作得很好,但是我怎么能用我的字典初始化,而不需要以后修改呢?不要定义setter,在中设置self.\u listing=value
,这正是我需要的。谢谢
class Person:
def __init__(self):
self.listing = 1
@property
def listing(self):
return self._listing
@listing.setter
def listing(self, value):
self._listing = {'a':'ok','b':'no','c':'yes', 'value': value}