Python重用父类方法和super的使用
生活随笔
收集整理的這篇文章主要介紹了
Python重用父类方法和super的使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
重用父類方法
一 指名道姓使用
class A:def __init__(self,name,age):self.name=nameself.age=ageclass Person:school='aaaa'def __init__(self,name,age):self.name=nameself.age=agedef study(self):print('study...')class Teacher(Person):def __init__(self,name,age,level):A.__init__(self,name,age)#self.name=name#self.age=ageself.level=levelclass Student(Person):school = 'bbbb'def __init__(self,name,age,course):#如何重用父類的__init__方法Person.__init__(self,name,age)self.course=coursedef study(self):Person.study(self)print("%s學生在學習"%self.name)stu1=Student('wed',19,'python') print(stu1.school) stu1.study()二 通過super關鍵字
''' Python大型免費公開課,適合初學者入門 加QQ群:579817333 獲取學習資料及必備軟件。 ''' class Person:school='aaaa'def __init__(self,name,age):self.name=nameself.age=agedef study(self):print('study...')class Student(Person):school = 'bbbb'def __init__(self,name,age,course):# super() 會按照mro列表拿到父類對象# 對象來調用綁定方法,不需要傳遞第一個參數(self)super().__init__(name,age)# 經典類和新式類# 經典類中必須這么寫(py3中沒有經典類),都用下面那種方式寫# super(Student,self).__init__(name,age)self.course=coursedef study(self):# Person.study(self)super().study()#print("%s學生在學習"%self.name)stu1=Student('wed',19,'python') #stu1.school='xxx' #print(stu1.school) stu1.study()super的使用
綁定方法回顧
''' Python大型免費公開課,適合初學者入門 加QQ群:579817333 獲取學習資料及必備軟件。 ''' class Student:def __init__(self,name,age):self.name=nameself.age=agedef study(self):print(self.name)print('study...')def chang_name(obj,new_name):print('原來的名字是%s'%obj.name)obj.name=new_nameprint('修改的名字是%s' % obj.name)#類來調用對象的綁定方法(寫在類中的函數,沒加裝飾器),有幾個參數就需要傳幾個參數 Student.__init__(123,'nick',18) #類實例化產生對象,會自動調用__init__完成初始化操作 stu=Student('nick',18) #對象的綁定方法的特殊之處,會把對象本身當做第一個參數傳入 stu.study() stu2=Student('tank',18) stu2.study()修改學生姓名
stu=Student('nick',18) #方式一 print(stu.name) stu.name='tank' print(stu.name) # 方式二: stu.chang_name('tank') print(stu.name) # 方式三 Student.chang_name(stu,'王二蛋') print(stu.name) # 方式四 # 定義了一個函數 def change_name(obj,name):#修改obj對象的name屬性print('原來的名字是%s' % obj.name)obj.name=nameprint('修改的名字是%s' % obj.name)change_name(stu,'二丫') print(stu.name)調用父類的兩種方式
object寫與不寫,在py3中沒有區別,有的人在py3中這么寫,為了向下兼容
調用父類方法的第一種方式 :指名道姓的方式,跟繼承關系無關
class Person(object):def __init__(self,name,age):self.name=nameself.age=agedef init_1(self,name,age):self.name=nameself.age=ageclass Student:school = 'yyyy'def __init__(self,name,age,course):#指名道姓的使用Person的__init__方法Person.__init__(self,name,age)init_1(self,name,age)self.course=coursestu=Student('nick',19,'python') print(stu.name)調用父類方法的第二種方式 :通過super關鍵字,跟繼承關系有關
class Person(object):def __init__(self,name,age):self.name=nameself.age=ageclass Student(Person):school = 'yyyy'def __init__(self,name,age,course): # #super()相當于得到了一個特殊對象,第一個參數不需要傳,調用綁定方法,會把自己傳過去 # ########## self不需要傳,不需要傳super().__init__(name,age) # #看到別人這么寫:super(類名,對象) 在py3中為了兼容py2 # #在py3中這么寫和省略寫法完全一樣 # #在py2中必須super(Student,self)寫 # super(Student,self).__init__(name,age)self.course=course # stu=Student('nick',19,'python') print(stu.name) print(stu.age) print(stu.course)總結:
有繼承關系的時候,通常用super,指名道姓的方式在什么情況下用?
- 沒有繼承關系
- 如果繼承了多個父類,super是按照mro列表找,現在想指名道姓的用某個父類的某個方法,就需要指名道姓的使用
總結
以上是生活随笔為你收集整理的Python重用父类方法和super的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python定义函数的三种方式
- 下一篇: python中 __str__和__re