私は2つの異なるオブジェクトを持っています。それらの1つは、リストまたはタプル属性内の他のN個のタイプオブジェクトをラップします。教室の生徒を例にとってみましょう。
class Student:
def __init__(self, name):
self.name = name
class ClassRoom:
def __init__(self, students):
self.students = students
もちろん、StudentインスタンスとClassRoomインスタンスのヒープがあります。
john, sam = Student('John'), Student('Sam')
patrick, michael, bill = Student('Patrick'), Student('Michael'), Student('Bill')
klass1 = ClassRoom([john, sam])
klass2 = ClassRoom([patrick, michael, bill])
各生徒は名前が一意であり、参照によって生徒の教室にアクセスすることはできないことを考慮してください。
sam.get_classroom() # Student class doesn't support this :(
そして、私たちはその仕事をするヘルパー関数を持っています:
def get_classroom_by_student(klasses, student_name):
for klass in klasses:
for student in klass.students:
if student.name==student_name:
return klass
# Or yield if a student belongs to more than one class
sams_class = get_classroom_by_student([klass1, klass2], 'Sam')
bills_class = get_classroom_by_student([klass1, klass2], 'Bill')
「フラットはネストよりも優れている」ので、効率的なジェネレーターを作成するにはどうすればよいですか、またはこのヘルパー関数を実装するためのPythonの方法はありますか?