$scope
如何解决这个问题?感谢
答案 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