python-3.x - 从另一个类访问单个变量 (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
,并以这种方式访问变量。这是不好的做法吗?
我真的很感激你能给我的任何帮助。
解决方案
您可以参考 的路线,但我Professor
认为最简单的方法是创建一个add_student
方法,将手动这样做,您可以避免循环引用(这也是不必要的,因为如果您只是为了获取属性而标记引用,那么您也可以直接标记属性):Student
Professor
Student
Professor
Student
course
course
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
推荐阅读
- java - 我的登录无效。我在代码中使用了用户名和密码
- laravel - 在 laravel 5.5 中手动身份验证总是返回 false?
- php - 什么会导致表单的“插入”代码仅在 80% 的时间内保存到数据库中?
- python - 用python3中的特定元素替换元素组
- email - 将电子邮件发送到保存在 Talend 的 csv 文件中的地址
- python - 如何正确编写从网页中提取所有链接的程序?
- reactjs - react-select - onInputChange 事件不记录选中选项的值,那么如何获取呢?
- java - 无法对数组类型 String[] 调用 split(String)
- java - 使用 java 的扫描仪读取输入
- python - 努力使用递归代码来二分搜索字符串