2017-10-14 5 views
1

J'essaie de créer une classe simple qui introduit une liste puis ajoute à la liste une fonction appelée "ajouter" qui est également définie dans la même classe.Liste ne passant pas entre les méthodes dans une définition de classe

Je continue à obtenir cette erreur: objet « liste » n'a pas d'attribut « a »

class try1: 
    def __init__(self, a=[]): 
     self.a = a 
     print(a) 
     return 

    def add(self, b=None): 
     self.a.append(b) 
     print(a) 
     return 

if __name__ == "__main__": 
    c=try1(['a', 'b', 'c']) 
    d = ['d', 'e', 'f'] 
    try1.add(d) 
+3

Quoi, ** exactement ** est votre indentation? Je soupçonne que votre définition 'add' est en dehors du bloc' class'. –

+2

Quels que soient les autres problèmes que vous pourriez avoir, s'il vous plaît lire https://stackoverflow.com/q/1132941/3001761 – jonrsharpe

Répondre

4

Vous avez un couple de choses différentes qui se passe ici qui cause cette erreur bizarre prospectifs.

Le problème de base est que vous essayez d'appeler add sur la classetry1, pas l'instance que vous venez de créer, dans la c variable. La modification de try1.add(d) à c.add(d) produit le résultat attendu (si vous supprimez également le print(a) ou le remplacez par print(self.a), puisque a n'existe pas dans cette étendue).

L'erreur sans rapport est parce que vous avez fait b un argument mot-clé. Lorsque vous essayez d'appeler try1.add, le premier argument devient self à l'intérieur de la méthode. Ensuite, vous obtenez un AttributeError parce que self est une liste, qui n'a évidemment pas un attribut nommé a.

En outre, vous shouldn't use a mutable as a default argument. De plus, vous n'avez pas besoin d'instructions return vides: toute fonction sans instruction return renvoie implicitement None.

+0

Merci! J'apprécie aussi l'information clarifiante! Je suis un codeur très vert donc tout est un peu accablant. –

0

Quelques petites choses ici. Tout d'abord, corrigez cette indentation. Python est vraiment spécifique à propos des espaces. En supposant que vous corrigiez l'indentation, vous rencontrerez quelques autres problèmes. Dans votre méthode main, vous voulez appeler c.add(d) (je pense).

Vous êtes probablement confronté à une erreur sur la ligne 9, qui est l'erreur dont vous parlez. Dans le cadre de votre méthode, la variable a n'existe pas encore. self.a fait, cependant. Vous voulez probablement imprimer self.a.

En note, les noms de classe en Python devraient commencer par une lettre majuscule. Les nombres sont autorisés, mais j'essayerais vraiment de les éviter.