首页 > 解决方案 > 从另一个类访问单个变量 (Python)

问题描述

所以,我很难弄清楚如何最好地构建我的 Python 代码。我有一个使用类的简短程序,我在下面的示例中重新创建了该程序:

prof1 = Professor()
prof2 = Professor()
professor_list = [prof1, prof2]

class Professor:
  def __init__(self):
    self.name = ""
    self.department = ""
    self.course = ""
    self.students = []

class Student:
  def __init__(self):
    self.name = ""
    self.activities = []

所以基本上,我有一个对象列表,它们是Professor类的实例。每个 Professor 对象还包含一个 Student 对象列表,每个对象都是Student该类的一个实例。我希望每个学生也能够course从其相应的教授(列表中包含该学生的教授对象)访问变量,但我不确定最简洁的方法是什么。

我考虑过Student继承自Professor,但这似乎很草率,因为我实际上并不想从 继承所有变量和功能Professor。比如Professor的department变量跟一个Student对象没有关系,我不希望Student有一个department属性。此外,学生不是教授的子类型,这是我与继承相关的。

我还想过手动将课程信息作为属性添加到每个学生,但这似乎也不对。在我想要的结构中,课程将是教授的独特属性,各种学生将与教授相关联。所有需要访问课程变量的学生都在教授的学生列表中——所以难道不应该有比手动添加给每个学生更简洁的方法让他们使用它吗?

这里还有一个想法:我可能会在 each 中包含对相应Professor类的引用Student,并以这种方式访问​​变量。这是不好的做法吗?

我真的很感激你能给我的任何帮助。

标签: python-3.xclassinheritance

解决方案


您可以参考 的路线,但我Professor认为最简单的方法是创建一个add_student方法,将手动这样做,您可以避免循环引用(这也是不必要的,因为如果您只是为了获取属性而标记引用,那么您也可以直接标记属性):StudentProfessorStudentProfessorStudentcoursecourse

class Professor:
  def __init__(self):
    self.name = ""
    self.department = ""
    self.course = ""
    self.students = []

  def add_student(self, student):
    self.students.append(student)
    student.course = self.course

class Student:
  def __init__(self):
    self.name = ""
    self.activities = []
    self.course = None

或者,您可以添加一个方法来Professor检查是否Student属于它并使用它来获取课程:

prof1 = Professor()
prof2 = Professor()
professor_list = [prof1, prof2]

class Professor:
  def __init__(self):
    self.name = ""
    self.department = ""
    self.course = ""
    self.students = []

  def teaches(self, student):
    return student in self.students

class Student:
  def __init__(self):
    self.name = ""
    self.activities = []

  def get_course(self, professors):
    for professor in professors:
      if professor.teaches(self):
        return professor.course

    return None

推荐阅读