【发布时间】:2014-10-10 06:31:52
【问题描述】:
所以我创建了一个非常简单的温度类,可以将给定的温度从摄氏温度转换为华氏温度,反之亦然。问题是我想在类中有一个“convert”方法,如果直接调用则执行,但如果分配给变量则不执行。这是我的代码:
class Temperature:
def __init__(self,temp=None,cf='C'):
if temp == None:
self.temp = float('0.0')
else:
try:
self.temp = float("{0:.2f}".format(temp))
except:
print('Your temperature must be a number!')
if cf not in ['c','C','f','F']:
print('You must identify the temperature as either F for Fahrenheit or C for Celsius!')
else:
self.cf = cf.upper()
def convert(self):
if self.cf == 'F':
self.temp = float("{0:.2f}".format((self.temp - 32) * 5 / 9))
self.cf = 'C'
return(self)
elif self.cf == 'C':
self.temp = float("{0:.2f}".format((9/5)*self.temp + 32))
self.cf = 'F'
return(self)
def __repr__(self):
return('Temperature({},{})'.format(self.temp,self.cf))
结果:
>>>t1 = Temperature()
>>>t1
Temperature(0.0,C)
>>>t2 = Temperature(100,'f')
>>>t2
Temperature(100.0,F)
>>>t3 = t3 = Temperature('12.5','c')
>>>t3
Temperature(12.5,C) #works fine up to here
>>>t1.convert()
Temperature(32.0,C) #converts when called - just what I want
>>>t4 = t1.convert() #Should set t4 equal TO VALUE of 't1.convert()' without rerunning method
>>>t4
Temperature(0.0,C) #THIS IS WHERE I GET LOST. I want t4 to print out 'Temperature(32.0,C)' Ideas?
【问题讨论】:
-
方法无法知道其返回值是否被分配给结果。您可以让
convert存储它的最后一个返回值并在下次再次返回它,但是没有办法告诉它只在其结果未分配给变量时才这样做。第一次调用方法的时候,为什么不直接把结果赋值给一个变量呢? -
我认为您的示例中的意思是
Temperature(0.0, *F*)。此外,尚不清楚为什么您希望对convert()的调用不会转换;这违反了该类 API 的最小惊讶原则。为什么不保持原样?convert()转换对象的同时也返回自身,这样就可以链式调用了。 -
您应该重新考虑您的方法,例如,您可以定义
C、F相应返回CelsiusTemperature 或FahrenheitTemperature 的属性(也有@ 987654330@ 和F属性)。
标签: python python-3.x