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 和学生都有一个参考,可以根据需要使用。