Python 获取对象时出现属性错误
因此,当我给程序提供以下命令时:Python 获取对象时出现属性错误,python,attributes,Python,Attributes,因此,当我给程序提供以下命令时: a = Drink(5) b = AlcoholicDrink(4) a. numberOfCalories 19.35 b.numberOfCalories 这就是我得到错误的地方 'AlcoholicDrink' object has no attribute 'sugar' 我曾尝试在酒精饮料类中添加sugar属性,但仍然得到相同的错误,有什么想法吗 class Drink: def __init__(self,sugar,drink
a = Drink(5)
b = AlcoholicDrink(4)
a. numberOfCalories
19.35
b.numberOfCalories
这就是我得到错误的地方
'AlcoholicDrink' object has no attribute 'sugar'
我曾尝试在酒精饮料类中添加sugar属性,但仍然得到相同的错误,有什么想法吗
class Drink:
def __init__(self,sugar,drink = 0):
self.sugar = sugar
self.drink = drink
def numberOfCalories(self):
return self.sugar * 3.87
class AlcoholicDrink(Drink):
def __init__(self,alcohol):
self.alcohol = alcohol
def numberOfCalories(self):
if self.alcohol > 0:
self.alcohol * 7.0 + self.sugar
else:
super.numberOfCalories()
对于酒精饮料
,您需要在\uuuuu init\uuuu
中调用\uuuu init\uuuuu()
。如果不这样做,中的内容将无法运行
您还应该在酒精饮料
的构造函数中添加糖
和饮料
的参数,并将它们传递给super()。下面是一个例子:
class Drink:
def __init__(self, sugar, drink=0):
self.sugar = sugar
self.drink = drink
def number_of_calories(self):
return self.sugar * 3.87
class AlcoholicDrink(Drink):
def __init__(self, alcohol, sugar, drink=0):
super().__init__(sugar, drink)
self.alcohol = alcohol
def number_of_calories(self):
if self.alcohol > 0:
return self.alcohol * 7.0 + self.sugar
else:
return super().number_of_calories()
我修复了代码中的几个其他问题:
酒精饮料。卡路里的数量
没有返回任何东西
- 在酒精饮料的else子句中,您在
super
之后缺少了parens。卡路里的数量
对于酒精饮料
,您需要在\uuuuu init\uuuu
中调用\uuu init\uuuuu()
。如果不这样做,中的内容将无法运行
您还应该在酒精饮料
的构造函数中添加糖
和饮料
的参数,并将它们传递给super()。下面是一个例子:
class Drink:
def __init__(self, sugar, drink=0):
self.sugar = sugar
self.drink = drink
def number_of_calories(self):
return self.sugar * 3.87
class AlcoholicDrink(Drink):
def __init__(self, alcohol, sugar, drink=0):
super().__init__(sugar, drink)
self.alcohol = alcohol
def number_of_calories(self):
if self.alcohol > 0:
return self.alcohol * 7.0 + self.sugar
else:
return super().number_of_calories()
我修复了代码中的几个其他问题:
酒精饮料。卡路里的数量
没有返回任何东西
- 在酒精饮料的else子句中,您在
super
之后缺少了parens。卡路里的数量
您在哪里添加了sugar属性?因为您来自Java/C背景,一个区别是,如果您在派生类中重写它,基本构造函数不会自动运行。@PeterWood如是说。虽然准确地说,\uuuuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu>是实例初始值设定项,但构造函数是\uuuuuuuuuuuuu;您的类正在使用父对象
类的\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
方法,因为它们不会覆盖\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu,一个区别是,如果在派生类中重写基构造函数,它不会自动运行。虽然准确地说,\uuuuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu>是实例初始值设定项,但构造函数是\uuuuuuu;你的类正在使用父对象对象类的\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
方法,因为它们不重写\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu?你能换一行,让我看看它应该是什么样子吗?@bradmonster我添加了一个工作示例,让我知道这是否有帮助,或者你是否还有任何问题。嘿,对于a=饮料(4)和a.NumberOfCarries,这部分工作正常,但当类型b=酒精饮料(4)时,我得到这个错误“\uu init\uuuu()缺少一个必需的位置参数:'sugar'”@嗯,是的。您需要给sugar
一个默认值,或者在创建类实例时提供它。非常感谢!帮了大忙!我不明白?你能换一行,让我看看它应该是什么样子吗?@bradmonster我添加了一个工作示例,让我知道这是否有帮助,或者你是否还有任何问题。嘿,对于a=饮料(4)和a.NumberOfCarries,这部分工作正常,但当类型b=酒精饮料(4)时,我得到这个错误“\uu init\uuuu()缺少一个必需的位置参数:'sugar'”@嗯,是的。您需要给sugar
一个默认值,或者在创建类实例时提供它。非常感谢!帮了大忙!