一、永不變的三個問答
1、什麼是繼承
繼承一種新建類的方式,新建的類稱之為子類 / 派生類,被繼承的類稱之為父類 \ 基類 \ 超類
2、為什麼要用繼承
減少類與類之間**元素
3、如何用繼承
class parent1: # 繼承的父類
pass
# print(parent1.__bases__)
class parent2: #子類
pass
# print(parent2.__bases__)# 子類
class sub1(parent1): # 沒加()時,無法繼承父類
pass
class sub2(parent1, parent2): # 可以『,,,』 一直寫下去
pass
# 如何檢視繼承關係
print(sub1.__bases__)
print(sub2.__bases__)
二、python中繼承的特點:
1. 子類可以遺傳/重用父類的屬性
2. python中乙個子類可以同時繼承多個父類
3. 在繼承背景下去說,python中的類分為兩種:新式類,經典類
新式類:
但凡繼承了object的類foo,以及該類的子類...都是新式類,在python3中乙個類即便是沒有顯式地繼承任何類,預設就會繼承object,
即python3中所有的類都是新式類
經典類:
沒有繼承object的類,以及該類的子類...都是經典類在python2中才區分新式類與經典類,在python2中乙個類如果沒有顯式地繼承任何類,
也不會繼承object
三、在單繼承背景下的屬性查詢優先順序: 物件->物件的類->父類->父類.....
class foo:
# ***=444
pass
class bar1(foo):
# ***=333
pass
class bar2(bar1):
# ***=222
pass
obj=bar2()
# obj.***=111
print(obj.***)
四、如何在子類派生的新方法中重用父類功能
源**:
class oldboystudent():
school = 'oldboy'
def __init__(self, name, age, ***, score=0):
school = 'oldboy'
self.name = name
self.age = age
self.*** = ***
self.score = score
class oldboyteacher():
school = 'oldboy'
def __init__(self, name, age, ***, level=10):
school = 'oldboy'
self.name = name
self.age = age
self.*** = ***
self.level = level
def score(self, stu, num):
stu.score = num
stu1 = oldboystudent('bp', 1000, 'shemale')
print(stu1.__dict__)
tea1 = oldboyteacher('dg', 20, 'sunmale')
print(tea1.__dict__)
在子類派生出的新方法中重用父類功能的方式一:
指名道姓地引用某乙個類中的函式
總結:1. 與繼承無關
2. 訪問是類的函式,沒有自動傳值的效果
class oldboypeople:
school = 'oldboy'
def __init__(self, name, age, ***):
self.name = name
self.age = age
self.*** = ***
class oldboystudent(oldboypeople):
def __init__(self, name, age, ***, score=0):
oldboypeople.__init__(self,name, age, ***)
self.score = score
def choose_course(self):
print('%s choosing course' % self.name)
class oldboyteacher(oldboypeople):
def __init__(self, name, age, ***, level):
oldboypeople.__init__(self,name, age, ***)
self.level = level
def score(self, stu, num):
stu.score = num
stu1 = oldboystudent('bp', 1000, 'shemale', score=0)
print(stu1.__dict__)
tea1 = oldboyteacher('dg', 20, 'sunmale', level=10)
print(tea1.__dict__)
在子類派生出的新方法中重用父類功能的方式二:super()必須在類中用
在python2中:super(自己的類名,自己的物件)
在python3中:super()
呼叫該函式會得到乙個特殊的物件,該物件專門用來訪問父類中的屬性,!!!完全參照mro列表!!!!
總結:1. 嚴格依賴繼承的mro列表
2. 訪問是繫結方法,有自動傳值的效果
class oldboypeople:
school='oldboy'
def __init__(self,name,age,***):
self.name=name
self.age=age
self.***=***
class oldboystudent(oldboypeople):
def __init__(self,name,age,***,score=0):
super(oldboystudent,self).__init__(name,age,***)
self.score=score
def choose_course(self):
print('%s choosing course'%self.name)
class oldboyteacher(oldboypeople):
def __init__(self,name,age,***,level):
super().__init__(name,age,***)
self.level=level
def score(self,stu,num):
stu.score=num
stu1=oldboystudent('bp',1000,'shemale',0)
print(stu1.__dict__)
tea1=oldboyteacher('dg',20,'male',10)
print(tea1.__dict__)
python基礎 繼承
class a object pass 父類,基類,超類 class b pass 父類,基類,超類 class a son a,b pass 子類,派生類 class ab son a pass 子類,派生類 乙個類 可以被多個類繼承 乙個類 可以繼承多個父類 python裡 print a so...
python基礎 繼承和多繼承
繼承 class a defspam self print a.spam defadd self,x,y return x y class b a defspam self 如果子類要對父類的方法進行重寫,再想呼叫父類的方法,就需要使用super 方法名 的形式 print b.spam super...
python基礎 繼承和多繼承
繼承 class a defspam self print a.spam defadd self,x,y return x y class b a defspam self 如果子類要對父類的方法進行重寫,再想呼叫父類的方法,就需要使用super 方法名 的形式 print b.spam super...