Python类中累加多个方法返回值时报method相加错误如何解决
问题修复方案
错误原因
你遇到的TypeError: unsupported operand type(s) for +: 'method' and 'method'报错,是因为在final_rate方法中调用rate_size、rate_breed、rate_color三个实例方法时没有加括号():
- 不加
()时,代码拿到的是方法对象本身,不是方法执行后返回的评分数值,自然无法做加法运算 - 加
()才会触发方法执行,拿到你需要的评分返回值
修复代码
只需要修改final_rate方法的实现即可:
def final_rate(self): # 所有实例方法调用都加上(),获取返回的评分值再做运算 final_rating = (self.rate_size() + self.rate_breed() + self.rate_color()) * 33 return final_rating
修复后完整可运行代码
import random colors = ['brown','black','yellow', 'green','purple','golden','white','pink'] breeds = ['lab','border collie','dalmation','husky','chiauaua'] sizes = ['small','medium','large'] class Dog: def __init__(self, color, breed, size): self.color = color self.breed = breed self.size = size def rate_color(self): for index, color in enumerate(colors): if self.color == color: color_rating = abs(index - len(colors)) / len(colors) return color_rating def rate_breed(self): for index, breed in enumerate(breeds): if self.breed == breed: breed_rating = abs(index - len(breeds)) / len(breeds) return breed_rating def rate_size(self): for index, size in enumerate(sizes): if self.size == size: size_rating = abs(index - len(sizes)) / len(sizes) return size_rating def final_rate(self): final_rating = (self.rate_size() + self.rate_breed() + self.rate_color()) * 33 return final_rating dog1 = Dog(random.choice(colors),random.choice(breeds),random.choice(sizes)) print(dog1.color) print(dog1.rate_color()) print(dog1.breed) print(dog1.rate_breed()) print(dog1.size) print(dog1.rate_size()) print(dog1.final_rate())
内容的提问来源于stack exchange,提问作者whm33
相关产品推荐
相关产品推荐

