一、重用父類方法
1 與繼承沒有關系的重用
-
指名道姓的使用
-
在子類里想用父類的方法,我們可以直接用父類名.方法名()--->父類里方法有幾個引數就傳幾個引數
-
我們看起來是子類在呼叫父類的方法,但是實際上,這并沒有存在繼承關系
class A:
def __init__(self,name,age):
self.name=name
self.age=age
class Person:
school = 'oldboy'
def __init__(self,name,age):
self.name=name
self.age=age
def study(self):
print('study....')
class Teacher(Person):
def __init__(self,name,age,level):
A.__init__(self,name,age)
self.level=level
class Student(Person):
school = 'yyyy'
def __init__(self,name,age,course):
Person.__init__(self,name,age)
self.course=course
def study(self):
Person.study(self)
print("%s學生在學習"%self.name
2 與繼承有關系的重用
super關鍵字
super在經典類和新式類使用的區別
經典類
super(Student,self).__init__(name,age)----->Student:當前子類,self:當前物件- python3中沒有經典類,所以這種方式一般是在python2中寫
- python3中也會有這種寫法,這樣寫是為了代碼可以向下兼容,拿到python2中也可以直接使用
新式類
super().__init__(name,age):括號里面不加引數- super() 會按照
__mro__串列拿到父類物件 - 它是通過物件來呼叫系結方法的,不需要傳遞第一個引數,物件呼叫父類的系結方法時,對自動將物件自己傳進去
#Python交流學習Q群:711312441
class Person(object):
school = 'oldboy'
def __init__(self,name,age):
self.name=name
self.age=age
def study(self):
print('study....')
class Student(Person):
school = 'yyyy'
def __init__(self,name,age,course):
#super() 會按照mro串列拿到父類物件
super().__init__(name,age)
# super(Student,self).__init__(name,age)
self.course=course
def study(self):
Person.study(self)
super().study()
print("%s學生在學習"%self.name)
stu1=Student('wed',19,"Python")
stu1.study()
print(Student.__mro__)
study....
study....
wed學生在學習
(<class 'main.Student'>, <class 'main.Person'>, <class 'object'>)
二、重用父類兩種方法的使用
1 指名道姓的使用
類名.類里的方法
- 一般在沒有繼承關系的時候使用
- 如果繼承了多個父類,super是按照mro串列找,現在想確切的用某個父類的某個方法,就需要指名道姓的使用
2 super的使用
- super().方法名()
- 有繼承關系的時候使用
- super()相當于得到了一個特殊物件,第一個引數不需要傳,呼叫系結方法,會把自己傳過去
- 使用super方法,它用父類的方法時,按照物件的mro串列的順序來查找
class A:
def f1(self):
print('A.f1')
class B:
def f1(self):
print('B.f1')
def f2(self):
print('B.f2')
super().f1()
# return 'xxxxx'
#class C(A,B):
#注意這個順序,這個順序報錯
class C(B,A):
def f1(self):
print('C.f1')
c=C()
c.f2()
print(C.mro())
B.f2
A.f1
[<class 'main.C'>, <class 'main.B'>, <class 'main.A'>, <class 'object'>]
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/541062.html
標籤:其他
上一篇:MyBatis的簡介及測驗
下一篇:Python類的封裝教程
