一、问题
初学者在学习python的时候会为这样的报错而手无足措’int’ object has no attribute ‘output’
令人恼火的是,不管怎么调试似乎都无法解决这个问题。于是你可能就看到了我这篇文章。
本篇文章写了这种报错的一个原因——重载运算中没有返回类的变量
原因是报错并非在于报错的字面含义上 :整形对象没有outout的属性(即未定义成员函数output())而是在函数之前的重载运算中忘记返回类的变量。
二、举例
下面以简要的代码举例:
class Money:
def __init__(self,a=0):
self.amount=a
def __add__(self,other):
sum=self.amount+other.amount
return sum
def output(self):
print("余额为:%f"%self.amount)
m1=Money(100)
m2=Money(500)
m3=m1.__add__(m2)
m3.output()
代码的流程是,规定了Money类,进一步在类里面规定amount数据类型,之后在m1与m2两个变量中运用该类,然后进行__add__重载运算,将结果赋值到变量m3中,最后显示m3变量。
乍一看似乎是没有问题的,但是仍旧如下报错
但不管我如何修改
m3=m1.__add__(m2)
或者是修改类的成员函数
def output(self):
print("余额为:%f"%self.amount)
都是不能解决这个报错问题
三、代码更改
原因出在了以下成员函数中
def __add__(self,other):
sum=self.amount+other.amount
return sum
上图代码在返回数值的时候忘记了返回Money类的数据类型amount
具体的错误在这一行,如下图所示
return sum
所以我们应将其改为如下代码
return Money(sum)
四、结果展示
成功运行!
文章出处登录后可见!
已经登录?立即刷新