您能解释一下我为什么这个简单的属性不起作用吗?
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:未定义名称“列表”
答案 0 :(得分:1)
listing
中的 __init__
是未定义的局部变量,不是对listing
对象的Person
属性的引用。那将是self.listing
。
您的属性有一个不返回任何内容的吸气剂,因此它隐式返回None
,因此Person().listing
将是None
。我认为那不是你想要的。
您似乎正在尝试定义属性的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
或(使用property
装饰器)
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}