Python自定义Temperature类实例化报无参数错误问题求助
代码问题分析
- 构造方法缺失导致实例化报错:你自定义的
Temperature类没有声明__init__初始化方法,Python默认提供的无参构造方法不支持接收额外入参,所以n_temp=Temperature(c)、n_temp=Temperature(f)这两行给类传参的代码会触发Temperature() takes no arguments的报错。 - 实例对象被重复覆盖:你先后两次给
n_temp变量赋值,第二次的赋值会直接清空第一次的实例内容,即便解决了构造方法的问题,也无法同时处理两个输入的温度值。 - 方法调用逻辑错误:
convertF、convertC是类的实例方法,调用时需要加括号,同时要传入对应参数,你写的print(n_temp.convertF)只会打印方法对象的内存地址,不会执行转换逻辑返回结果。
修复方案
方案1:不修改原有类结构,调整实例化和调用逻辑
这种方案改动最小,适合不需要持久化存储温度属性的场景:
class Temperature(): def convertF(self,c): return c*1.8+32 def convertC(self,f): return (f-32)*(5/9) c = float(input()) f = float(input()) # 实例化时不传参 n_temp = Temperature() # 调用方法时传入对应温度值 print(n_temp.convertF(c)) print(n_temp.convertC(f))
方案2:新增构造方法存储温度属性
如果需要把温度值作为实例属性存储,可以调整类结构如下:
class Temperature(): # 新增初始化方法,接收温度值 def __init__(self, temp): self.temp = temp def convertF(self): return self.temp*1.8+32 def convertC(self): return (self.temp-32)*(5/9) c = float(input()) f = float(input()) # 分别实例化两个对象存储不同温度值 c_temp = Temperature(c) f_temp = Temperature(f) print(c_temp.convertF()) print(f_temp.convertC())
内容的提问来源于stack exchange,提问作者Vaiebhav Patil
相关产品推荐
相关产品推荐

