interweaving of objects DEMO

来源:互联网 发布:mac os 系统清理 编辑:程序博客网 时间:2024/05/17 01:33
#quote from MIT 'introduction to computation and programming using python, Revised'import datetimeclass Person(object):        def __init__(self, name):        """Create a person"""        self.name = name        try:            lastBlank = name.rindex(' ')            self.lastName = name[lastBlank+1:]        except:            self.lastName = name        self.birthday = None            def getName(self):        """Returns self's full name"""        return self.name            def getLastName(self):        """Returns self's last name"""        return self.lastName            def setBirthday(self, birthdate):        """Assumes birthdate is of type datetime.date           Sets self's birthday to birthdate"""        self.birthday = birthdate            def getAge(self):        """Returns self's current age in days"""        if self.birthday == None:            raise ValueError        return (datetime.date.today() - self.birthday).days            def __lt__(self, other):        """Returns True if self'name is lexicographically           less than other's name, and False otherwise"""        if self.lastName == other.lastName:            return self.name < other.lastName        return self.lastName < other.lastName            def __str__(self):        """Returns self's name"""        return self.name        class MITPerson(Person):    nextIdNum = 0 #identificaiton number        def __init__(self, name):        Person.__init__(self, name)        self.idNum = MITPerson.nextIdNum        MITPerson.nextIdNum += 1            def getIdNum(self):        return self.idNum            def __lt__(self, other):        return self.idNum < other.idNum        class Student(MITPerson):    pass    class UG(Student):    def __init__(self, name, classYear):        MITPerson.__init__(self, name)        self.year = classYear    def getClass(self):        return self.year        class Grad(Student):    pass        class Grades(object):    """A mapping from students to a list of grades"""    def __init__(self):        """Create empty grade book"""        self.students = []        self.grades = {}        self.isSorted = True            def addStudent(self, student):        """Assumes: student is of type Student           Add student to the grade book"""        if student in self.students:            raise ValueError('Duplicate student')        self.students.append(student)        self.grades[student.getIdNum()] = []        self.isSorted = False            def addGrade(self, student, grade):        """Assumes: grade is a float           Add grade to the list of grades for student"""        try:            self.grades[student.getIdNum()].append(grade)        except:            raise ValueError('Student not in mapping')                def getGrades(self, student):        """Return a list of grades for students"""        try: #return copy of student's grades            return self.grades[student.getIdNum()][:]        except:            raise ValueError('Student not in mapping')                def getStudents(self):        """Return a list of the students in the grade book"""        if not self.isSorted:            self.students.sort()            self.isSorted = True        return self.students[:] #return copy of list of students


%run "C:\Users\Administrator\test.py"


print p1
Eric Xing


print p2
Robert Miller

g = Grades()


g.addStudent(p1)


g.addGrade(p1, 100)


g.addGrade(p1, 90)


g.addGrade(p1, 97)


g.getGrades(p1)
Out[33]: [100, 90, 97]


g.addStudent(p2)


g.addGrade(p2, 80)


g.addGrade(p2, 88)


g.addGrade(p2, 82)


g.addGrade(p2, 86)


g.getGrades(p2)
Out[40]: [80, 88, 82, 86]


g.getStudents()
Out[41]: [<__main__.MITPerson at 0x6fd2d70>, <__main__.MITPerson at 0x6fd2ef0>]


for e in g.getStudents():
    print e
    
Eric Xing
Robert Miller


0 0
原创粉丝点击