2016-11-13 1 views
1

Hallo Ich habe einige Probleme mit dem Versuch, durch eine Liste von Klassen zu durchlaufen, um einen bestimmten Wert auszudrucken, der thet-Instanz dieser Klasse hält.Mein Programm kompiliert aber es druckt nichts aus, ich habe auch versucht, "player.player in playerlist" in der for loop zu haben, aber ich habe auch das gleiche Ergebnis bekommen. Jede Hilfe würde sehr geschätzt werden.Python durchläuft eine Liste von Klassenobjekten und extrahiert einen Wert

Meine Hauptfunktion

class main: 

if __name__ == '__main__': 

    while True: 

     print("Please Select An Option Below:") 
     print("1 - Create Player:") 
     print("2 - List Players:") 
     print("3 - Create Team:") 
     print("4 - Sell Player:") 
     print("5 - Buy Player:") 
     x = raw_input("Please select a option: \n") 

     playerList = [] 

     if(x == '1'): 

      import Player 
      p1 = Player.player() 
      pname = raw_input("Please Enter A Player Name \n") 
      page = raw_input("Please Enter A Player Age \n") 
      pwage = raw_input("Please Enter A Player Wage \n") 
      pteam = raw_input("Please Enter A Player Team \n") 
      p1.pname = pname 
      p1.page = page 
      p1.pwage = pwage 
      p1.pteam = pteam 
      playerList.append(p1) 
      continue 

     if(x == '2'): 
      for p1 in playerList: 
       print(p1.pname) 
      continue 

Meine Spielerklasse

class player(object): 

    @property 
    def pname(self): 
     return self.pname 

    @pname.setter 
    def pname (self, value): 
     pass 

    @property 
    def page(self): 
     return self.page 

    @page.setter 
    def page (self, value): 
     pass 

    @property 
    def pwage(self): 
     return self.pwage 

    @pwage.setter 
    def pwage(self, value): 
     pass 

    @property 
    def pteam(self): 
     return self.pteam 

    @pteam.setter 
    def pteam(self, value): 
     pass 

---- ----- Update

class main: 

    if __name__ == '__main__': 

     while True: 

      print("Please Select An Option Below:") 
      print("1 - Create Player:") 
      print("2 - List Players:") 
      print("3 - Create Team:") 
      print("4 - Sell Player:") 
      print("5 - Buy Player:") 
      x = raw_input("Please select a option: \n") 

      playerList = [] 

      if(x == '1'): 

       import Player 
       nplayer = Player.player() 
       nplayer.set_name(raw_input("test\n")) 
       playerList.append(nplayer) 
       continue 

      if(x == '2'): 
       for player in playerList: 
        print(player.get_name) 
       continue 

class player(object): 

    __name = "" 

    @property 
    def get_name(self): 
     return self.__name 

    def set_name(self, name): 
     self.__name = name 
+1

Bitte korrigieren Sie Ihre Einrückung. Weil es scheint, dass Sie nichts im globalen Bereich ausführen, weil 'class main:' –

+1

Ihre Setter sind leer. Ist das normal? –

+0

Jedes Mal, wenn Sie Ihr Menü anzeigen, initialisieren Sie playerList auf eine leere Liste. Du wirfst daher alle hinzugefügten Spieler ab, bevor du sie möglicherweise ausdrucken kannst. – jasonharper

Antwort

0

Wenn Sie p1.pname = pname die Setter schreiben aufgerufen. Sie tun jedoch nichts im Setter. Wenn der Getter später aufgerufen wird, hat er also nichts zurückzugeben.

Für Getter und Setter in Python zu arbeiten, müssen Sie so etwas wie dies tun:

class player(object): 
    @property 
    def pname(self): 
     return self._pname 

    @pname.setter 
    def pname (self, value): 
     self._pname = value 
+0

Hallo vielen Dank für Ihre Antwort, ich habe meinen Code aktualisiert, um die Änderungen widerzuspiegeln (siehe den aktualisierten Code im ersten Beitrag) Ich kann erfolgreich einen Wert mit dem Setter erhalten und setzen/Getter, aber ich kann immer noch keine "for-Schleife" bekommen, die ein spezifisches Attribut einer Klasse ausgibt (in diesem Fall Spielername) – AlasdairRyan

0

Vielen Dank an diejenigen, die es durch nicht Einrichtung der Setter/Getter richtig verursacht mein Problem geholfen, wie gesagt, oben und mir mein Array in der Display-Menüoption verursacht es die Instanz der Klasse zu einer anderen Liste zu senden.

class main: 

if __name__ == '__main__': 

    playerList = [] 

    while True: 

     print("Please Select An Option Below:") 
     print("1 - Create Player:") 
     print("2 - List Players:") 
     print("3 - Create Team:") 
     print("4 - Sell Player:") 
     print("5 - Buy Player:") 
     x = raw_input("Please select a option: \n") 

     if(x == '1'): 

      import Player 
      nplayer = Player.player() 
      nplayer.set_name(raw_input("Please Enter A Name\n")) 
      playerList.append(nplayer) 
      continue 

     if(x == '2'): 
      for nplayer in playerList: 
       print(nplayer.get_name) 
      continue 

class player(object): 

__name = "" 

@property 
def get_name(self): 
    return self.__name 

def set_name(self, name): 
    self.__name = name 
Verwandte Themen