+:'method'和'float'不支持的操作数类型

时间:2017-01-31 19:40:44

标签: python typeerror

$scope

如何解决这个问题?感谢

1 个答案:

答案 0 :(得分:1)

coffee.price方法,因此coffee.price + 0.5会为您提供错误。

如果您想获得该方法的结果,调用方法:

self._price = coffee.price() + 0.5

注意,我在这里用+=替换了=,毕竟你要设置一个新属性。我还重命名了属性,因为否则你的CoffeeWithMilk.price方法也会变得非常混乱,导致第二个错误看起来很像{{1还是一种方法。这需要将self.price方法修复为:

def price(self)

所以完成的代码如下所示:

def price(self):
    return self._price

您可以避免使用类继承完全重新定义class Coffee: def __init__(self): self._price = 4.0 def price(self): return self._price def __str__(self): return "Coffee with price " + str(self._price) class CoffeeWithMilk: def __init__(self, coffee): self._price = coffee.price() + 0.5 def price(self): return self._price 方法;使price成为CoffeeWithMilk的专用版本:

Coffee

您也可以获得class Coffee: name = 'Coffee' def __init__(self): self._price = 4.0 def price(self): return self._price def __str__(self): return "{} with price {}".format(self.name, self._price) class CoffeeWithMilk(Coffee): name = 'Coffee with milk' def __init__(self, coffee): self._price = coffee.price() + 0.5 实施,因此您的最终__str__会输出一些更有趣的内容。

您也可以将print(coffeeWithMilk)设为property;属性是每次访问属性时自动为您调用的方法:

Coffee.price

在这种情况下,我不使用方法或属性。没有必要在这里隐藏class Coffee: name = 'Coffee' def __init__(self): self._price = 4.0 @property def price(self): return self._price def __str__(self): return "{} with price {}".format(self.name, self._price) class CoffeeWithMilk(Coffee): name = 'Coffee with milk' def __init__(self, coffee): self._price = coffee.price + 0.5 。只需用直接属性替换它:

_price

那是因为方法和属性都不会传递class Coffee: name = 'Coffee' def __init__(self): self.price = 4.0 def __str__(self): return "{} with price {}".format(self.name, self.price) class CoffeeWithMilk(Coffee): name = 'Coffee with milk' def __init__(self, coffee): self.price = coffee.price + 0.5 属性。您也可以直接访问它。

最后但同样重要的是,您从_price实例创建CoffeeWithMilk实例,然后从第一个Coffee实例创建另一个 CoffeeWithMilk实例,所以你的最终实例已经添加了0.5到4 两次

CoffeeWithMilk