1.子类可以继承一个或是多个父类,子类继承父类的所有公有实例属性和方法
2.继承实现了代码的重用以及个性化定制,减少代码量
#!/usr/bin/env python # -*- coding: utf-8 -*- """ # # Authors: limanman # OsChina: http://my.oschina.net/pydevops/ # Purpose: # """ import pprint import random # 学校类 class School(object): """ Attributes: student_list: school student list teacher_list: school teacher list """ def __init__(self): # 学生列表 self.student_list = [] # 老师列表 self.teacher_list = [] # 学生/老师公有类 class SchoolMember(object): """ Attributes: name: school member name age : school member age sex : school member sex """ # 公有实例属性 def __init__(self, name, age, sex): self.name = name self.age = age self.sex = sex class Student(SchoolMember): """ Attributes: grade: student grade """ def __init__(self, name, age, sex, school, grade): # 父类初始化 SchoolMember.__init__(self, name, age, sex) self.grade = grade # 避免外部恶意调用(学生炸学校) self.__school = school # 学生入学校 self.__school.student_list.append(self) def stu_study(self): print '''\ name : %s age : %s sex : %s doing: %s ''' % (self.name, self.age, self.sex, 'study...') # 学生转校同步到学校 def stu_transfer(self): """Student transfer to other school.""" self.__school.student_list.remove(self) class Teacher(SchoolMember): """ Attributes: salary: teacher salary """ def __init__(self, name, age, sex, school, salary): # 父类初始化 SchoolMember.__init__(self, name, age, sex) self.salary = salary # 避免外部恶意调用(老师炸学校) self.__school = school self.__school.teacher_list.append(self) def tch_teaching(self): print '''\ name : %s age : %s sex : %s doing: %s ''' % (self.name, self.age, self.sex, 'teach...') # 老师转校同步到学校 def tec_transfer(self): """Teacher transfer to other school.""" self.__school.teacher_list.remove(self) def formated_show(header, cur_list): """Formated show students/teachers info. Args: header : print header info cur_list: student/teacher list """ print '==> %s' % (header) for cur_item in cur_list: last_attr = getattr(cur_item, 'grade', None) or getattr(cur_item, 'salary', None) print (getattr(cur_item, 'name', None), getattr(cur_item, 'age', None), getattr(cur_item, 'sex', None), last_attr) if __name__ == '__main__': # 学生注册 cur_school = School() for i in xrange(2): name = 'user_%s' % i age = 20 + i sex = random.choice(('Man', 'Woman')) grade = random.randint(60, 100) Student(name, age, sex, cur_school ,grade) Teacher(name, age, sex, cur_school ,10000) # 当前人数 formated_show('Student', cur_school.student_list) formated_show('Teacher', cur_school.teacher_list) # 学生转校 cur_school.student_list[0].stu_transfer() # 老师转校 cur_school.teacher_list[0].tec_transfer() # 转校后的 formated_show('Student', cur_school.student_list) formated_show('Teacher', cur_school.teacher_list)