Class 在 class 中(作为属性)调用包含它的 class 的方法
Class within a class (as attribute) to call a method of the class that contains it
我处于这样的情况,我需要一个位于另一个(作为属性)内的 class 来与包含它的 class 进行通信,但是,我无法理解如何去做。
以这种情况为例:有一个 class HighSchoolClass 包含属于 class 的学生列表,并且 HighSchoolClass 有一个方法 foo 重新排列学生的位置或其他方式。但是,每个学生都有能力询问是否可以进行重新排列。所以它需要调用重新排列 class.
的方法
# Singelton
class HighSchoolClass:
def __init__(self):
self.list_of_students = # A list of instances of Student
self.profesor = ...
def rearrange_class():
# do something
class Student:
def ask_for_rearrange():
# Needs to call rearrange_class() of the class he is in.
有什么方法可以做到这一点(最好只是以某种方式调用它)?请注意 rearrange_class() 不是静态的。如果有帮助,HighSchoolClass 将是一个单例。
通常,您会明确地为每个 Student
提供对它们所属的 HighSchoolClass
的引用。一个简单的例子可能看起来像
class Student:
def __init__(self):
self.class_ = None
def add_class(self, class_):
self.class_ = class_
class HighSchoolClass:
def __init__(self):
self.list_of_students = []
def add_student(self, student):
self.list_of_students.append(student)
class Registrar:
def add_student_to_class(self, student, class_):
class_.add_student(student)
student.add_class(class_)
请注意对学生和 class 使用第三个 class。否则,学生是否应该负责更新他们加入的每个 class,或者每个 class 是否应该更新他们的学生,这并不明显。
the_class = HighSchoolClass()
s1 = Student()
s2 = Student()
r = Registrar()
r.add_student_to_class(s1, the_class)
r.add_student_to_class(s2, the_class)
现在,每个 class 和学生都有一个参考,可以根据需要使用。
我处于这样的情况,我需要一个位于另一个(作为属性)内的 class 来与包含它的 class 进行通信,但是,我无法理解如何去做。
以这种情况为例:有一个 class HighSchoolClass 包含属于 class 的学生列表,并且 HighSchoolClass 有一个方法 foo 重新排列学生的位置或其他方式。但是,每个学生都有能力询问是否可以进行重新排列。所以它需要调用重新排列 class.
# Singelton
class HighSchoolClass:
def __init__(self):
self.list_of_students = # A list of instances of Student
self.profesor = ...
def rearrange_class():
# do something
class Student:
def ask_for_rearrange():
# Needs to call rearrange_class() of the class he is in.
有什么方法可以做到这一点(最好只是以某种方式调用它)?请注意 rearrange_class() 不是静态的。如果有帮助,HighSchoolClass 将是一个单例。
通常,您会明确地为每个 Student
提供对它们所属的 HighSchoolClass
的引用。一个简单的例子可能看起来像
class Student:
def __init__(self):
self.class_ = None
def add_class(self, class_):
self.class_ = class_
class HighSchoolClass:
def __init__(self):
self.list_of_students = []
def add_student(self, student):
self.list_of_students.append(student)
class Registrar:
def add_student_to_class(self, student, class_):
class_.add_student(student)
student.add_class(class_)
请注意对学生和 class 使用第三个 class。否则,学生是否应该负责更新他们加入的每个 class,或者每个 class 是否应该更新他们的学生,这并不明显。
the_class = HighSchoolClass()
s1 = Student()
s2 = Student()
r = Registrar()
r.add_student_to_class(s1, the_class)
r.add_student_to_class(s2, the_class)
现在,每个 class 和学生都有一个参考,可以根据需要使用。