Python没有在类中显示print语句的结果

时间:2015-05-20 10:53:05

标签: python python-2.7

这可能是微不足道的,但在搜索时我得不到解决方案:

我有以下简单类:

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),结果完全相同。我想我错过了一些非常愚蠢的东西。谢谢

2 个答案:

答案 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)