Attribut erreur: 'liste' de l'objet n'a pas d'attribut "gainWeight'

Pourquoi mon code me donner l'erreur Attribute error: 'list' object has no attribute 'gainWeight' ?

Code de classe:

class Pig():

def __init__(self, name, age, weight, value):
    self.name = name
    self.age = age
    self.weight = weight
    self.value = value

def Weight(self):
    self.weight = randrange(50,250)

def growOlder(self):
    self.age += 1

def gainWeight(self, weight):
    self.weight += 5

def runAndGainValue(self):
    self.value += 5

def __str__(self):
    a = self.name + " "
    a += str(self.age) + " "
    a += str(self.weight) + " "
    a += str(self.value) + " "
    return a

Et le code du programme principal:

def work_function():
    work = input("What do you want to do for work today?"
        "\nPress 1 to feed your animals"
        "\nPress 2 to take them out in the yard"
        "\nPress 3 to your animals to sleep"
        "\nPress 4 to go back to main menu.\n")
    if work == "1":
        yourfarm.printAnimals()
        print ("are all very happy to be fed and have gained some weight!\nLook at the weight now and see for yourself!")
        p.gainWeight(+5)
            #Here is where the problem lies.
        yourfarm.printAnimals()

p est une liste avec les éléments pour mes animaux.

Je ne peux pas comprendre pourquoi je reçois ce message d'erreur.

  • Si p est une liste, alors vous ne pouvez pas appeler gainWeight sur elle, comme les listes n'ont pas cette méthode.
  • Essayez p[0] (ou tout autre animal que vous voulez). Que vais travailler.
  • Pas liés à votre question, mais s'il vous plaît noter que votre gainWeight méthode ne tient pas compte de la weight argument.
  • Okey pas sûr de ce que tu veux dire, que faut-il faire pour mon programme? Et est-il de toute façon pour résoudre le problème?
  • Alors jetez un oeil à cette méthode et de réfléchir à ce qu'il fait quand je l'appelle .gainWeight(10) et ce qu'il est (probablement) censé être.
  • glglgl déjà décrit le problème. Utilisation self.weight += weight au lieu de self.weight += 5 pour le résoudre.
  • Ah je vois, merci! Est-ce le même code que j'utilise si je veux le runAndGainValue fonction aswell? Parce que quand j'ai essayer le code que j'obtiens "je ne peux pas convertir int objet de str implicity" :S
  • probablement que vous avez passé un string au lieu d'un entier pour le constructeur. Si ce problème persiste, veuillez ouvrir une nouvelle question contenant le code de l'endroit où vous créez le Pig objets.
  • Ok, je vais ouvrir une nouvelle question, parce que je ne peux pas la comprendre.

InformationsquelleAutor Bondenn | 2013-11-03