将类函数与数字相除时出现“Float对象不可调用”
我有一个叫做 Portfolio
的类,里面有一个方法 portfolio_risk(self, year)
。如果我尝试用一个数字去除这个方法,就会出现一个错误:
浮点对象不可调用
根据我的理解,这个错误是因为 portfolio_risk
方法后面有括号,但我需要调用这个方法来进行计算。有没有其他方法可以写这段代码,以避免这个错误呢?
if Portfolio.portfolio_risk(1)/5 < 7:
print('meets criteria')
补充说明:我在下面添加了一些更多的信息:
我的类是这样的:
class Portfolio(import_data):
def __init__(self, number_yrs):
self.debt = [0 for i in range(number_yrs)]
# the import_csv function just pulls a data table from excel and creates a list
# the list is 2D and creates a property called self.sub_portfolio in this class
# all the values imported from the csv file are of type float
self.import_csv('sub_portfolio')
self.debt[0] = self.debt_portfolio
def portfolio_risk(self, year):
# this sums up the risk column of a portfolio to give total risk for a year
self.portfolio_risk = sum(a[0] for a in self.debt[year])
return(self.portfolio_risk)
如果我创建这个类的一个实例:
new_portfolio = Portfolio(5)
我的 Portfolio 类在一个文件 portfolio_class.py 中,当我在这个文件里测试时,以下代码可以正常工作:
print(new_portfolio.portfolio_risk(0))
在另一个文件 analysis.py 中,我有以下代码:
nyears = 10
real_portfolio = Portfolio(nyears)
for i in range(nyears):
if i > 0:
# first use last prior year portfolio
the_debt_portfolio.debt[i] = the_debt_portfolio.debt[i-1]
if real_portfolio.portfolio_risk(i)/ 5 < 7:
print('this is within the risk band')
现在我似乎遇到了这个错误:
line 29, in portfolio_risk
self.portfolio_risk = sum(a[0] for a in self.portfolio_risk[year])
TypeError: 'int' object is not iterable
而不是浮点对象不可调用的错误
3 个回答
0
你可以试试这样做:
portfolio = Portfolio() # you may need to pass some parameters
if portfolio.portfolio_risk(1) / 5 < 7:
print('meets criteria')
当然,如果 portfolio_risk
是一个字段而不是一个方法,你还是会遇到那个错误。
3
如果这个方法是这样定义的:
class Portfolio(object):
def portfolio_risk(self, year):
return 1
那么你必须有一个Portfolio
的实例:
p = Portfolio()
if p.portfolio_risk(1) / 5 < 7:
# do something
3
你的代码有几个问题:
If
应该改成if
(小写的i
);- 你需要一个
Portfolio
的实例,才能调用那个(非静态的)方法。
不过,关于你遇到的那个具体错误,情况不是很清楚。一个可能的原因是你在某个地方把 portfolio_risk
重新绑定成了一个 float
类型。即便如此,首字母大写的 If
也会导致语法错误。
我觉得最好的办法是先解决上面提到的两个问题,如果这样还不行,再发更多的代码出来。