【问题标题】:<Class> Object has no attribute <attribute_name><Class> 对象没有属性 <attribute_name>
【发布时间】:2021-12-29 19:14:55
【问题描述】:

所以,我是 python 新手,在尝试运行下面的代码时遇到错误被卡了好几个小时

class ConjuntoDeInteiros:
    def _init_(self, conjunto, storage_capacity=100): #initializes a list and its length, default value is 100
        self.storage_capacity = storage_capacity
        self.conjunto = [None] * storage_capacity

    def addElement(self, intNumber): #add an element to the list
        self.conjunto.append(intNumber)

    def union(self, instanceOfConjuntoDeInteiros): #returns the union of an instance list with another instance list
        return self.conjunto + instanceOfConjuntoDeInteiros

if __name__ == '__main__':
    c1 = ConjuntoDeInteiros()
    c2 = ConjuntoDeInteiros()
    c1.addElement(10)
    c2.addElement(5)
    c1.union(c2)

错误:回溯(最近一次调用最后一次): 文件“”,第 15 行,在 文件“”,第 7 行,在 addElement 中 AttributeError:“ConjuntoDeInteiros”对象没有属性“conjunto”

我做错了什么???

【问题讨论】:

  • _init_ -> __init__,每边使用两个下划线

标签: python python-3.x oop


【解决方案1】:

 它向您显示的错误是因为您尝试添加类ConjuntoDeInterios()的实例,如果您想将另一个类的列表与当前定义的一起加入类你需要通过这种方式重载ConjuntoDeInterios()上的operator+

class ConjuntoDeInteiros:
    def __init__(self, conjunto=[None], storage_capacity=100): #initializes a list and its length, default value is 100
        self.storage_capacity = storage_capacity
        self.conjunto = [None] * storage_capacity

    # overload operator (+)
    def __add__(self, instanceOfConjuntoDeInteiros): # returns the union of an instance list with another instance list
        return self.conjunto + instanceOfConjuntoDeInteiros.conjunto

    def addElement(self, intNumber): # add an element to the list
        self.conjunto.append(intNumber)

if __name__ == '__main__':
    c1 = ConjuntoDeInteiros()
    c2 = ConjuntoDeInteiros()
    c1.addElement(10)
    c2.addElement(5)
    print(c1 + c2)
 None, None, None, None, None, None, None, None, None, None, None, None, None, None,
 None, None, None, None, None, None, None, None, None, None, None, None, None, None,
 None, None, None, None, None, None, None, None, None, None, None, None, None, None,
 None, None, None, None, None, None, None, None, None, None, None, None, None, None,
 None, None, None, None, None, None, None, None, None, None, None, None, None, None,
 None, None, None, None, None, None, None, None, None, None, None, None, None, None,
 None, None, None, None, None, None, None, None, None, None, None, None, None, None,
 None, None, 10,   None, None, None, None, None, None, None, None, None, None, None, 
 None, None, None, None, None, None, None, None, None, None, None, None, None, None, 
 None, None, None, None, None, None, None, None, None, None, None, None, None, None, 
 None, None, None, None, None, None, None, None, None, None, None, None, None, None, 
 None, None, None, None, None, None, None, None, None, None, None, None, None, None, 
 None, None, None, None, None, None, None, None, None, None, None, None, None, None, 
 None, None, None, None, None, None, None, None, None, None, None, None, None, None, 
 None, None, None, None, None, 5

【讨论】:

    【解决方案2】:

    您的init 函数错误。它必须是__init__,而你有_init_。因此,您的 self.conjunto 从未定义,因此您的错误。你也有conjuntostorage_capacity作为__init__的参数,但是你在创建ConjuntoDeInteiros()时没有传递它们。

    【讨论】:

    • 没有必要,因为 Python constructor 就是这样工作的。
    • @jezza_99 谢谢!!!有效!我没有注意到错字啊哈哈
    • @h.devillefletcher 我知道您可以在__init__ 中调用parameter=value,但conjunto 仍然需要用户参数,因为它没有定义
    • 没错!在这种情况下可能不是必要的参数...
    【解决方案3】:

    class ConjuntoDeInteiros:
        def _init_(self, conjunto, storage_capacity=100): #initializes a list and its length, default value is 100
            self.storage_capacity = storage_capacity
            self.conjunto = [None] * storage_capacity

    您的代码需要在 self.conjunto 中定义 conjunto。否则它不会识别连词。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-18
      • 2020-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多