繁体   English   中英

如何修复Python错误:AttributeError:类型对象X没有属性Y

[英]How to fix Python error: AttributeError: type object X has no attribute Y

我正在创建一个练习python文件以更好地理解面向对象的编程,并且出现以下错误:

AttributeError: type object 'ID' has no attribute 'the_other_number'

我不太明白为什么会这样,因为当我像下面那样更改变量时,它就可以正常工作。 我仅在尝试在if语句中使用它时收到错误:

ID.the_other_number = 'new_value'

以下是我尝试修复的示例代码,感谢您的帮助。

class ID():
   def __init__(self):
       self.other_number()
       pass

   def other_number(self):
       self.the_other_number = 3111

class ID_2():
    def __init__(self):
        self.update_number()

    def update_number(self):
       if ID.the_other_number > 4:
           print(ID.the_other_number)

if __name__ == '__main__':
   ID()
   ID_2()

我期望它了解什么变量等于并正确运行if语句。 另外,不要试图理解代码,我意识到代码没有意义,这只是一个例子。

当您运行ID() ,将创建ID类的新实例。 __init__调用该实例的other_number方法,该方法分配实例属性the_other_number 由于您不会在任何地方保存该实例,因此通过分配ID()的输出,可以立即对其进行垃圾回收。 ID类不变。

运行ID_2() ,将创建ID_2类的实例并运行它的__init__方法。 调用update_number该实例,检查的方法ID._the_other_number ID没有the_other_number属性,因此引发错误。

阅读有关ClassesPython教程 ,并特别注意类对象和实例对象之间的区别。

您犯了一个错误:您必须了解ID是一个类,而不是一个对象

因此,如果要使用功能ID.the_other_number ,则必须首先创建一个ID对象。 因此,只需在代码中增加一行

class ID():
   def __init__(self):
       self.other_number()
       pass

   def other_number(self):
       self.the_other_number = 3111

class ID_2():
    def __init__(self):
        self.update_number()

    def update_number(self):

        # Create one object of class ID - ID_object
        ID_object = ID()

        # Call the function for ID_object
        if ID_object.the_other_number > 4:
           print(ID_object.the_other_number)

if __name__ == '__main__':
   ID()
   ID_2()

@Patrick Haugh的答案已经解释了为什么您的代码无法按照您期望的方式执行。 缺少缩进的问题,这是我将如何修改您的代码以打印类ID的the_other_number属性:

class ID():
    def __init__(self):
        self.other_number()

    def other_number(self):
        self.the_other_number = 3111
        return self.the_other_number

class ID_2():
    def __init__(self):
        self.update_number()

    def update_number(self):
        id = ID()
        if id.other_number() > 4:
            print(id.the_other_number)

if __name__ == '__main__':
   ID()
   ID_2()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM