2017-06-19 12 views
1

Donc je travaille sur la mise en place d'une classe Python qui doit être utilisée comme un moyen d'obtenir/définir des parties d'un dictionnaire. J'essaie de le configurer pour avoir un dictionnaire (par exemple ID Numbers: Names) et une variable qui est le membre actuellement sélectionné du dictionnaire. J'essaye de l'implémenter de sorte que j'ai des getters et des setters pour retourner quelle est la valeur de dictionnaire actuellement sélectionnée, aussi bien que des setters avec un bloc try/except pour changer la sélection courante en un autre membre dans le dictionnaire. Je ne me soucie pas de passer le numéro d'identification, je dois juste m'assurer que je peux récupérer le nom par l'intermédiaire du getter. Voici le code que j'ai:Getters/Setters pour la classe Python

class Classroom: 

    def __init__(self): 

     self.__classList = { 
      001: Mark, 
      002: Kevin, 
      003: Stacy} 
     self.currentStudent = self.__classList[001] #start at the beginning of the list 

    @property 
    def currentStudent(self): 
     return self.__currentStudent 

    @currentStudent.setter 
    def currentStudent(self, ID): 
     try: 
      currentStudent = __classList[ID] 
     except: 
      print("Invalid ID entered") 

Quand je suis allé tester le code, si je comprends bien l'utilisation @property si je entrez les données suivantes:

classroom = Classroom() 
classroom.currentStudent = 002 
print(classroom.currentStudent) 

je devrais avoir l'impression d'écran « Kevin " non? Ce que je reçois en ce moment, c'est que l'écran est en train d'imprimer 002. Qu'est-ce que je fais de mal?

+1

Vous n'avez pas fait une instance de 'Classroom'. Vous travaillez avec l'objet de classe lui-même, qui se comporte très différemment. – user2357112

+1

De plus, votre setter est déjà détruit. – user2357112

+0

'currentStudent = __classList [ID]' <- où êtes-vous censé obtenir le '__classList'? Cela ne marchera pas si vous ne l'avez pas dans l'espace de noms global ... De plus, étant donné que vous ne le stockez nulle part, vous pouvez aussi bien supprimer la méthode. – zwer

Répondre

0

Je l'ai modifié un peu pour le faire fonctionner. Je suppose que vous utilisez python2.7

class ClassRoom(object): 

    def __init__(self): 

     self.__classList = { 
      001: "Mark", 
      002: "Kevin", 
      003: "Stacy"} 
     self.__currentStudent = self.__classList[001] #start at the beginning of the list 

    @property 
    def currentStudent(self): 
     return self.__currentStudent 

    @currentStudent.setter 
    def currentStudent(self, ID): 
     try: 
      self.__currentStudent = self.__classList[ID] 
     except: 
      print("Invalid ID entered") 

class_room_1 = ClassRoom() 
class_room_1.currentStudent = 002 

Test

print class_room_1.currentStudent 
Kevin 
+0

Avoir 'class_room_1.currentStudent == class_room_1.currentStudent' être' False' semble confus. – Blender