Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 获取对象时出现属性错误_Python_Attributes - Fatal编程技术网

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
    一个默认值,或者在创建类实例时提供它。非常感谢!帮了大忙!