Python 繼承基礎

2021-08-25 05:39:41 字數 4016 閱讀 4002

一、永不變的三個問答

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