天天看點

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.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

--------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()

繼續閱讀