2016-03-29 11 views
0

Tough für mich, einen guten Titel für dieses Problem zu finden. Bitte beachten Sie den Code.So ordnen Sie zwei untergeordnete Objekte in Python zu

class School: 
    def __init__(self, info): 
     self.name = info['name'] 
     self.student = info['students'] 
     for x in self.student: 
      self.child[self.student[0]] = Child(x, self.student[x]) 
      self.student[x] = Student(x, self.student[x]) 

class Student: 
    def __init__(self, student_info, student_id): 
     self.id = student_id 
     self.name = student_info[0] 
     self.age = student_info[1] 
     self.sex = student_info[2] 
     self.attendance = False 

class Child(Student) 
    def __init__(self, student_info, student_id): 
     self.id = student_info[0] 
     self.student_id = student_id   

schools = {1:{'name':'Hard Knocks', 'students':{1:['Tim',12,M], 2:['Kim',11,M]}}} 

Ziemlich viel möchte ich der Student Parameter ‚Besuch‘ in der Lage den Zugang sein, sowohl die Schüler und Kinder Objekt innerhalb der Instanz Schule verwenden.

#instantiating 
for x in students: 
    schools[x] = School(schools[x]) 

schools[1].student[1].attendance = True 
print schools[1].child['Tim'].attendance 

Ich mag die letzte Zeile wahr zu drucken, da ich Schulen festgelegt [1] .student [1] .attendance, aber sein Druck Falsch. Wie ordne ich es so, wenn ich das Kind ['Tim'] Objekt einstelle, ist es dasselbe wie das Setzen des Schüler [1] Objekts. Schüler [1] und Kind ['Tim'] sollten demselben Parameter des Schülerobjekts zugeordnet werden.

Ist das überhaupt möglich?

Antwort

0

Sie müssen den Student Konstruktor aus dem Child aufrufen, um seine Attribute zu initialisieren. Sie können dies mit super (eine Anforderung in mehreren Vererbungsszenarien) oder verwenden Sie die Klasse Student explizit.

Beispiel Super mit:

class Child(Student) 
    def __init__(self, student_info, student_id): 
    super().__init__(student_info, student_id) 
    ... 

Wahrscheinlich wollen Sie auch die dupliziert id Attribut aus der Child Klasse entfernen.

Für weitere Informationen über Super: Understanding Python super() with __init__() methods

+0

Auch auf der Klassenhierarchie von der Frage, könnte man einfach ein 'child' Objekt instanziiert und es von beiden Kindern und Schülern Arrays verweisen, wie jedes' Child' Objekt ist auch ein Student. –

+0

super() .__ init __ (Schüler_Info, Student_ID) löst 'TypeError: super() benötigt mindestens 1 Argument (0 gegeben)' –

+0

Ich habe versucht Super (Kind, selbst) .__ Init __ (Student_info, Student_ID) und Student (Objekt), Super zu benutzen scheint nicht zu funktionieren. –

Verwandte Themen