<p>这里只有一个设计(请随意更改评分系统):</p>
<pre><code>class Course:
"""
Models a course being taught, for example: geometry
"""
def __init__(self, course_name):
self._course_name = course_name
self._enrollment = {} # No students so far
@property
def course_name(self):
"""Get the course_name."""
return self._course_name
def enroll_student(self, student):
"""
enroll student in this course
"""
self._enrollment[student] = None # no grade so far
student.add_course(self) # show that student is taking this course
return self
def enrollment(self):
"""
generate students enrolled in course
"""
for student, grade in self._enrollment.items():
yield student, grade
def assign_grade(self, student, grade):
"""
assign grade to a student
"""
assert student in self._enrollment
self._enrollment[student] = grade
return self
def get_grade(self, student):
"""
return a student's grade
"""
return self._enrollment[student]
class Student:
"""
Models a student
"""
def __init__(self, name):
self._name = name
self._courses = []
@property
def name(self):
"""Get student name"""
return self._name
def add_course(self, course):
self._courses.append(course)
return self
def courses(self):
for course in self._courses:
yield course
geometry = Course('geometry')
history = Course('history')
john_doe = Student('john doe')
jane_doe = Student('jane_doe')
geometry.enroll_student(john_doe)
geometry.enroll_student(jane_doe)
history.enroll_student(jane_doe)
geometry.assign_grade(john_doe, 1)
geometry.assign_grade(jane_doe, 2)
history.assign_grade(jane_doe, 1)
# print all the geometry grades
for student, grade in geometry.enrollment():
print(student.name, grade)
# print all of john_doe's courses and grades:
for course in john_doe.courses():
print('john_doe:', course.course_name, course.get_grade(john_doe))
for course in jane_doe.courses():
print('jane_doe:', course.course_name, course.get_grade(jane_doe))
</code></pre>
<p>印刷品:</p>
<pre><code>john doe 1
jane_doe 2
john_doe: geometry 1
jane_doe: geometry 2
jane_doe: history 1
</code></pre>