我是一名python初学者,我被困在@property和@property中。二传手装饰。 我想使用setter将一些数据添加到名为__content的字典中。 这是我的尝试,但是当我运行这个脚本时,只有最后一个元素被添加到字典中! 那么我在这里错过了什么!
class Something:
def __init__(self,elem):
self.__content={}
self.__content.update(elem)
print type(self.__content)
@property
def content(self):
return self.__content
@content.setter
def content(self,elem):
self.__content.update(elem)
并且
from transpose import Something
c=Something(dict(one=4))
print c.content
c.content=dict(two=6)
print c.content
结果
/usr/bin/python /home/radouani/PycharmProjects/demoPython/test.py
<type 'dict'>
{'one': 4}
<type 'dict'>
{'two': 6}
Process finished with exit code 0
另一个问题:当我尝试使用setter影响元组或整数时,我不明白为什么python会改变__content的类型?
亲切
答案 0 :(得分:3)
属性不适用于旧式类。您必须从object继承以创建新的样式类:
class Something(object):
...
来自property
doc:
class property([fget[, fset[, fdel[, doc]]]])
返回new-style class es的属性属性(从对象派生的类)。
答案 1 :(得分:1)
如前所述,属性不适用于“旧式”类。您必须继承object
以在Python 2.x中创建一个新的样式类,以使属性能够工作。
class Something(object):
#stuff
在Python 3.x中,这将会发生 - Python3中的所有类都是“新风格”类。 “New Style”类也在Python2中实现,但是因为它会改变“旧式”类的功能,所以你必须通过继承object
来“选择”在Python2中使用New Style类。
即使这在Python3中隐式地自动发生,但仍然首选,但不是必需的,您明确地从object
继承这一继承以实现向后兼容。
开发课程的绝佳资源:Raymond Hettinger - Python's Class Development Toolkit