AttributeError:'dict'对象没有属性'____'

时间:2018-03-13 09:10:02

标签: python class attributeerror

我一直在乱用这段代码几个小时,它仍然给我错误。我想为测试做一个'automark',在那里你会介绍好的答案和不好的答案,并计算最终的分数。

代码:

class puntuacion:
    def __init__(self, aciertos, errores):
        self.aciertos = int(input("Introduce el numero de aciertos"))
        if self.aciertos > 40:
            print("Numero maximo de aciertos: 40")
            exit()
        self.errores = int(input("Introduce el numero de errores: "))

    def calculo(self):
        totalac = self.aciertos * 0.25
        print(totalac)
        while self.errores > 3:
            totalerr += -0.25
            self.errores - 3
        print'Nota final: ', totalac-totalerr
calculo({})

错误:

  C:\Users\Admin>python C:\Users\Admin\Documents\python\test2.py
Traceback (most recent call last):
  File "C:\Users\Admin\Documents\python\test2.py", line 1, in <module>
    class puntuacion:
  File "C:\Users\Admin\Documents\python\test2.py", line 17, in puntuacion
    calculo({})
  File "C:\Users\Admin\Documents\python\test2.py", line 10, in calculo
    totalac = self.aciertos * 0.25
AttributeError: 'dict' object has no attribute 'aciertos'

1 个答案:

答案 0 :(得分:0)

您无法直接调用实例方法:您必须首先实例化该类:

p = puntuacion(something, something_else)
p.calculo()

calculo()方法不带任何参数:第一个参数self是隐式的,并且对应于类实例。你没有通过它。

您还应该从input()删除__init__个功能;您已经通过aciertoserrores作为参数,通常您不想做&#34;复杂的&#34;在类的初始化中的东西(比如用户交互):

...
def __init__(self, aciertos, errores):
    self.aciertos = aciertos
    self.errores = errores
...

然后:

aciertos = int(input("Introduce el numero de aciertos"))
if aciertos > 40:
    sys.exit("Numero maximo de aciertos: 40")
errores = int(input("Introduce el numero de errores: "))

p = puntuacion(aciertos, errores)
p.calculo()