私はPythonで構成(has-a関係)ロジックを調べています。このためにはAddress
のクラスStudent
があります。学生の中でstudent_dictを使って複数の生徒記録を保存しようとしています。私はGraduateStudent
subclass
ing Student
を持っています。私は辞書を使い、IDをキーに設定し、名前、年齢、部署などの対応する詳細を値として格納します。後で学生の住所を追加しようとすると、アクセスしようとすると複雑になります。例:student_dict.get(id)[1])[2]
より簡単に属性を呼び出すための辞書の使い方
私の質問は、学生の既存の詳細に住所を追加することです。これにより、タプルとしてアドレスが追加され、アクセスするときに、追加の索引付けでフェッチするのが面倒になります。 の方法Student
とget_course()
の方法でこれをGraduateStudent
で参照できます。以下はコードと呼び出しです。誰かが歩き回って、多次元の索引付けではなく値に簡単にアクセスできる方法を提案できますか?
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
呼び出し:
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)
結果:
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
それは私には思える**住所**と**学生**は、単に静的で'ウィットh ** id **はそれぞれの名前付きタプル 'Student'を指し、それぞれは' Address'を指し示すプロパティを持つことができます – Anzel