2017-06-19 4 views
1

Also arbeite ich an der Einrichtung einer Python-Klasse, die als eine Möglichkeit verwendet werden soll Teile eines Wörterbuchs zu erhalten/setzen. Ich versuche es einzurichten, so dass ich ein Wörterbuch (zum Beispiel ID-Nummern: Namen) und eine Variable, die das derzeit ausgewählte Mitglied des Wörterbuchs ist.Getter/Setter für Python Klasse

Ich versuche es zu implementieren, damit ich Getter und Setter zurückgeben, was der aktuell ausgewählte Wörterbuchwert ist, sowie Setter mit einem try/except-Block, um die aktuelle Auswahl zu einem anderen Mitglied im Wörterbuch zu ändern. Es ist mir egal, die ID-Nummer zu übergeben, ich muss nur sicherstellen, dass ich den Namen über den Getter abrufen kann. Dies ist der Code, den ich habe:

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") 

Als ich den Code zu testen, aus meinem Verständnis mit der Verwendung von @property wenn ich Eingabe folgenden:

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

ich soll den Siebdruck „habe Kevin " Nein? Was ich im Moment bekomme ist, dass der Bildschirm 002 druckt. Was mache ich falsch?

+1

Sie keine Instanz von 'Classroom' gemacht hat. Sie arbeiten mit dem Klassenobjekt selbst, das sich sehr unterschiedlich verhält. – user2357112

+1

Auch dein Setzer ist sowieso kaputt. – user2357112

+0

'currentStudent = __classList [ID]' <- Woher soll die '__classList' kommen? Es wird nicht funktionieren, es sei denn, Sie haben es im globalen Namespace ... Auch, da Sie es nirgendwo speichern, können Sie auch die Methode löschen. – zwer

Antwort

0

Ich habe es ein wenig geändert, damit es funktioniert. Ich nehme an, Sie verwenden 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

Wenn 'class_room_1.currentStudent == class_room_1.currentStudent'' 'False' ist, erscheint es verwirrend. – Blender