【发布时间】:2014-01-07 03:30:35
【问题描述】:
我尝试像流动一样使用属性装饰器及其设置器
class Circle:
def __init__(self, radius=0):
self.__radius = radius
@property
def radius(self):
return self.__radius
@radius.setter
def radius(self, radius):
if (radius > 0):
self.__radius = radius
else:
raise ValueError
c = Circle()
c.radius = -1
但是在 python 2.x 中什么都没有发生。
只有 python 3.x 可以引发 ValueError。
但是,我发现了这个post
该帖子建议使用新的类样式(继承对象),
但我不知道新类风格中的哪些功能可以让它发挥作用。
我想知道属性和对象的关系。
【问题讨论】:
-
我在 2.7.6 中收到 ValueError。
-
上面的代码在 python 2.7 中引发了 ValueError。因为您已经在使用新的样式类(通过继承对象)。为什么要避免使用新样式对象?
-
这是您尝试的实际代码吗?该类继承自
object;当您实际尝试时,您还记得从object继承吗?如果可能的话,从实际的源文件中复制/粘贴您的代码。 -
我不想避免使用新样式。我只是想知道为什么新风格可以奏效。
-
对不起,我的原始帖子中的代码已经使用了新的类样式。我更新了它,它现在不能在 2.x 中工作。
标签: python python-3.x properties python-2.x