2016-03-29 17 views
0

Bu sorun için iyi bir başlık bulmak zor. Lütfen kodlara bakınız.Python'da iki alt nesne birbiriyle eşleştirilir

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]}}} 

Hemen hemen ben Okulu örneği içinde Öğrenci ve Çocuk nesnesi ikisini de kullanarak Öğrenci parametresi 'katılım' muktedir erişim olmak istiyorum.

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

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

ben [1] .student [1] .attendance okulları ayarlanır, ancak onun baskı Yanlış beri son satırı Doğru yazdırmak istiyorum. Bunu nasıl eşleştirebilirim ki [[]] nesnesini [1] nesnesini ayarladığımda, öğrenci [1] nesnesini ayarlamakla aynıdır. öğrenci [1] ve çocuk ['Tim'] aynı Student nesnesinin parametresine eşlenmelidir.

Bu mümkün mü?

cevap

0

Bunu özelliklerini başlatıldı için Child birinden Student kurucusunu çağırmak gerekiyor. Bunu super (birden çok devralma senaryosunda bir gereksinim) ile yapabilir veya Student sınıfını açıkça kullanabilirsiniz. süper kullanılarak

Örnek:

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

Muhtemelen de Child sınıftan çoğaltılamaz id özelliğini kaldırmak istiyorum. süper hakkında daha fazla bilgi için

: Understanding Python super() with __init__() methods

+0

Ayrıca sorudan sınıf hiyerarşisine, sadece bir 'child' nesnenin örneğini verebilir ve her' Child' nesnesi olarak, hem çocuk hem de öğrenci diziler buna başvuruda ayrıca bir 'Öğrenci' biridir. , –

+0

süper() .__ init __ (student_info, student_id) yükseltir süper kullanmak işe yaramıyor. –

+0

Süperim çalıştı (Çocuk, kendini) .__ init __ (student_info, student_id) ve Öğrenci (nesne): 'super() (Verilen 0) en az 1 argüman alır TypeError' –

İlgili konular