Python OOP方法间传值时agecalc方法返回0与None问题咨询
问题原因定位
agecalc()方法无返回值导致打印结果为None:Python中所有函数/方法如果没有显式写return语句,默认返回None,你当前的agecalc只给实例属性self.age赋值,没有返回计算结果,所以直接打印方法调用结果会得到None。
agecalc()的入参冗余未使用:你定义方法时预留了year参数,但实际计算时用的是setyear()提前设置的self.year属性,参数没有用到。你之前得到0的原因大概率是没有先调用setyear()就直接调用agecalc(),此时self.year是初始化时的默认值0,计算结果不符合预期;如果你按照现有代码先执行setyear(2025)再调用agecalc(),self.age实际会被赋值为10,只是你没有读取这个属性而已。
修正方案
给你两个可选的修改方向,按需选择即可:
方案1:保留setyear()提前设置年份的逻辑
class Dog: def __init__(self, name, born, breed): self.name = name self.born = born # 出生年份 self.breed = breed self.year = 0 self.age = 0 def setyear(self, year): self.year = year def agecalc(self): # 去掉多余的year参数,直接用提前设置好的self.year计算 self.age = self.year - self.born # 增加return返回计算结果 return self.age mydog1 = Dog(name="Lassy", born=2015, breed="Husky") mydog1.setyear(2025) # 直接调用方法打印返回值即可 print("dog age =", mydog1.agecalc())
方案2:去掉setyear(),计算时直接传年份
如果不需要提前存储年份,计算时直接传入目标年份逻辑更简洁:
class Dog: def __init__(self, name, born, breed): self.name = name self.born = born # 出生年份 self.breed = breed self.age = 0 def agecalc(self, year): self.age = year - self.born return self.age mydog1 = Dog(name="Lassy", born=2015, breed="Husky") # 计算时直接传目标年份即可 print("dog age =", mydog1.agecalc(2025))
两个方案运行后都会输出预期结果dog age = 10。
内容的提问来源于stack exchange,提问作者GYSHIDO
相关产品推荐
相关产品推荐

