2013-10-12 2 views
0

Lorsque j'imprime ma liste des vingt occurrences les plus importantes, tout ce que j'obtiens est l'emplacement de l'objet et non les données réelles dont j'ai besoin. Aussi, si vous avez des idées d'amélioration, cela serait grandement apprécié. S'il vous plaît aider. Merci.Emplacements des objets avec des classes (Python)

Voici mon code.

class topList(): 
    __slots__ = ("name", "gender", "occurences") 

def mkList(name, gender, occurences): 
    find = topList() 
    find.name = name 
    find.gender = gender 
    find.occurences = occurences 
    return find 

def main(): 
    year = input('Enter year: ') 
    file = open('yob' + year + '.txt') 
    lst = [] 
    femaleLst = [] 
    maleLst = [] 
    for line in file: 
     line = line.strip().split(",") 
     names = mkList(line[0], line[1], line[2]) 
     lst.append(names) 
     if names.gender == 'F': 
      femaleLst += [ line ] 
     else: 
      maleLst += [ line ] 
    while len(lst) < 20: 
     male = maleLst.pop() 
     female = femaleLst.pop() 
     if maleLst.occurences > femaleLst.occurences: 
      lst += [ male ] 
     else: 
      lst += [ female ] 
    print(lst[ : 20]) 

main() 

Répondre

2

Ajouter __repr__ et __str__ méthodes à votre classe:

class topList(): 
    __slots__ = ("name", "gender", "occurences") 

    def __repr__(self): 
     return 'topList({s.name!r}, {s.gender!r}, {s.occurences!r})'.format(s=self) 

    def __str__(self): 
     return '{s.name} ({s.gender}): {s.occurences!r})'.format(s=self) 

Démo:

>>> class topList(): 
...  __slots__ = ("name", "gender", "occurences") 
...  def __str__(self): 
...   return 'topList({s.name!r}, {s.gender!r}, {s.occurences!r})'.format(s=self) 
... 
>>> tl = topList() 
>>> tl.name = 'FooBar' 
>>> tl.gender = 'm' 
>>> tl.occurences = 42 
>>> print(tl) 
FooBar (m): 42 
>>> tl 
topList('FooBar', 'm', 42) 

La méthode __str__ est appelée automatiquement lorsque votre objet est converti en une chaîne, comme le print() la fonction fait.

La méthode __repr__ est utilisée pour les représentations repr() et lorsque votre objet est affiché dans des listes et autres conteneurs.

+0

Merci pour votre aide, mais si cela ne vous dérange pas pourriez-vous me dire comment faire pour que mon truc .pop se passe? Mon programme ne fera pas ressortir les valeurs que je veux à la place, il va simplement tout imprimer. –

+1

@Underdog_Nate: Vous avez plus de 20 éléments dans 'lst' * déjà *; vous ajoutez toutes les entrées à 'lst', donc le test' len (lst) <20' n'est jamais vrai. –

Questions connexes