Python:類的繼承例項
class School(object):
def init(self,name,addr): #建構函式,用來初始化
self.name=name
self.addr=addr
self.staffs=[]
self.students=[]
def enroll(self,stu_obj): #註冊學生 print("為學員 %s 辦理註冊手續" %stu_obj.name) self.students.append(stu_obj) def hire(self, staff_obj): #僱傭老師 print("僱 %s 為老師" % staff_obj.name) self.staffs.append(staff_obj)
class schoolMember(object):
def init(self,name,age,sex):
self.name=name
self.age=age
self.sex=sex
def tell(self):
pass
class Teacher(schoolMember):#新式類繼承法,繼承父類schoolMember
def init(self,name,age,sex,salary,course):
super(Teacher,self).init(name,age,sex) #新式類繼承法
self.salary=salary
self.course=course
def tell(self):
print('''----info of Teacher:%s----
Name:%s
Age:%s
Sex:%s
Salary:%s
Course:%s
''' % (self.name,self.name,self.age,self.sex,self.salary,self.course))
def teach(self): #教學
print(" %s is teaching course[%s]" % (self.name,self.course))
class student(schoolMember):#繼承
def init(self,name,age,sex,stu_id,grade):
super(student,self).init(name,age,sex) # 新式類寫法,是用來解決多重繼承問題的,
#在super機制裡可以保證公共父類僅被執行一次,至於執行的順序,是按照mro進行的(E.mro)。
#注意super繼承只能用於新式類,用於經典類時就會報錯。
#新式類:必須有繼承的類,如果沒什麼想繼承的,那就繼承object
#經典類:沒有父類,如果此時呼叫super就會出現錯誤:『super() argument 1 must be type, not classobj』,
self.stu_id=stu_id
self.grade=grade
def tell(self): #介紹自己,重構父類方法
print('''---info of Teacher:%s ---
Name=%s
Age=%s
Sex=%s
Stu_id=%s
Grade=%s
''' %(self.name,self.name,self.age,self.sex,self.stu_id,self.grade))
def pay_tution(self,amount):
print("% s has paid tution for $%s" %(self.name,amount))
school=School('old boy1','沙河') #例項化一個學校
t1=Teacher("李明",33,'F',15000,"Linux") #例項化一個老師
t2=Teacher("李立",23,'M',12000,"python")
s1=student("王麗",19,'F',1001,'Linux')#例項化一個學生
s2=student("李麗明",23,'M',1002,'python')
school.enroll(s1) #學校註冊一個學生
school.enroll(s2) #學校註冊一個學生
school.hire(t1) #學校僱傭一個老師
school.hire(t2) #學校僱傭一個老師
t1.tell()
s1.tell()
print(school.students) #列印學生列表
print(school.staffs)
school.staffs[0].teach() #讓老師講課
for stu in school.students:
stu.pay_tution(5000) #交學費