这可能是微不足道的,但在搜索时我得不到解决方案:
我有以下简单类:
class Celcius:
def __init__(self, temperature=0):
self.temperature = temperature
def to_fahrenheit(self):
return (self.temperature*1.8) + 32
def get_temperature(self):
print "getting temp"
return self._temperature
def set_temperature(self, value):
if value < -273:
raise ValueError("dayum u trippin' fool")
print "setting temp"
self._temperature = value
temperature = property(get_temperature, set_temperature)
c = Celcius()
当我在Sublime Text 3(通过点击cmd + B)中运行它时,控制台不会打印任何内容。我应该看到:
setting temp
如果我在脚本的末尾添加以下内容:
print "banana"
print "apple"
这两行都按预期打印。
如果我从终端运行上面的python脚本(使用python -u,或只是python),结果完全相同。我想我错过了一些非常愚蠢的东西。谢谢
答案 0 :(得分:9)
这不起作用,因为你写了
class Celcius:
...
同时使用新式类的功能。要使用属性,您需要从object继承:
class Celcius(object):
...
诀窍。
参考:Descriptor Howto,引用:请注意,仅为新样式对象或类调用描述符(如果类从对象或类型继承,则该类为新样式)
答案 1 :(得分:-1)
您根本没有调用set_temperature(self, value)
方法。
这一行
self.temperature = temperature
您的__init__()
方法(由c = Celcius()
调用)中的只是直接设置self.temperature
,而无需调用setter。
显而易见的解决方案是从
重写 init ()方法def __init__(self, temperature=0):
self.temperature = temperature
为:
def __init__(self, temperature=0):
self.set_temperature(temperature)