Ich erkunde Zusammensetzung (hat eine Beziehung) Logik in Python und dafür habe ich eine Klasse Student
, die eine Address
hat. Ich versuche mehrere Schülerdatensätze zu speichern, indem ich student_dict in Student verwende. Ich habe eine subclass
ing Student
. Ich benutze ein Wörterbuch und setze ID als Schlüssel und speichere die entsprechenden Details wie Name, Alter, Abteilung als Wert. Später, wenn ich versuche, Adresse des Studenten hinzuzufügen, wird es kompliziert, wenn versucht wird, auf sie zuzugreifen. Beispiel: student_dict.get(id)[1])[2]
Wie verwende ich Wörterbuch für einfacheren Aufruf von Attributen
Meine Frage ist beim Hinzufügen der Adresse ich an die vorhandenen Details des Schülers anhängen. Dies fügt die Adresse als Tupel hinzu und wenn es darauf ankommt, wird es mühsam, sie mit zusätzlicher Indizierung abzurufen. Sie können dies in add_address()
Methode innerhalb Student
und get_course()
Methode in beziehen. Unten ist der Code und Aufruf. Kann jemand einen Spaziergang machen und einen Weg vorschlagen, so dass ich leichter auf die Werte zugreifen kann als auf die multidimensionale Indexierung?
class Address(object):
def __init__(self, street, pin):
self.street = street
self.pin = pin
def __str__(self):
return "Address: {} {}".format(self.street, self.pin)
class Student(object):
# Composition
student_dict = {}
def add_address(self, id, street, pin):
self.address = Address(street, pin)
self.student_dict[id] = self.student_dict[id], self.address
def get_address(self, id):
if (self.is_exists(id)):
return self.get(id)[1]
else:
print "<No Student record found>"
return ""
def put(self, id, details):
if id in self.student_dict.keys():
print "Student %d already exists" %id
return
self.student_dict[id] = details
...
# class
# Class that extends Student
class GraduateStudent(Student):
def put(self, id, *args):
super(GraduateStudent, self).put(id, args)
# def
def get_course(self, id):
if (self.is_exists(id)):
return (self.get(id)[0])[2]
else:
print "<No record found>"
return ""
# def
# class
Invocations:
s = GraduateStudent()
s.put(1, "Swad", 17, "Computer Science")
s.put(2, "Vish", 18, "MECH.")
s.put(3, "Vino", 18, "MECH.")
s.add_address(1, "11 vvk street", 600015)
s.add_address(2, "22 vvk street", 600015)
s.add_address(3, "33 vvk street", 600015)
print "\nStudent details::"
print 1,": COURSE: ", s.get_course(1), ",", s.get_address(1)
print 2,": COURSE: ", s.get_course(2), ",", s.get_address(2)
print 3,": COURSE: ", s.get_course(3), ",", s.get_address(3)
Ergebnis:
Student details::
1 : COURSE: Computer Science , Address: 11 vvk street 600015
2 : COURSE: MECH. , Address: 22 vvk street 600015
3 : COURSE: MECH. , Address: 33 vvk street 600015
Es scheint mir ** Adresse ** und ** Studenten ** sind nur statisch, wo die Methoden in einer Container-Klasse leben sollte, wie 'Studenten 'Witz h ein dict von ** id ** s zeigt auf jedes namedtuple 'Student', und jeder kann eine Eigenschaft haben, die auf seine' Adresse' zeigt. – Anzel