python類的繼承

2021-10-25 21:11:32 字數 4879 閱讀 7133

目錄

一、概述

二、類的繼承

2.1繼承的定義

2.2 建構函式的繼承

2.3 子類對父類方法的重寫

三、類繼承的事例

物件導向程式設計 (oop) 語言的乙個主要功能就是「繼承」。繼承是指這樣一種能力:它可以使用現有類的所有功能,並在無需重新編寫原來的類的情況下對這些功能進行擴充套件。

通過繼承建立的新類稱為「子類」或「派生類」,被繼承的類稱為「基類」、「父類」或「超類」,繼承的過程,就是從一般到特殊的過程。在某些 oop 語言中,乙個子類可以繼承多個基類。但是一般情況下,乙個子類只能有乙個基類,要實現多重繼承,可以通過多級繼承來實現。

繼承概念的實現方式主要有2類:實現繼承、介面繼承。

實現繼承是指使用基類的屬性和方法而無需額外編碼的能力。

介面繼承是指僅使用屬性和方法的名稱、但是子類必須提供實現的能力(子類重構爹類方法)。

在考慮使用繼承時,有一點需要注意,那就是兩個類之間的關係應該是「屬於」關係。例如,employee 是乙個人,manager 也是乙個人,因此這兩個類都可以繼承 person 類。但是 leg 類卻不能繼承 person 類,因為腿並不是乙個人。

oo開發正規化大致為:劃分物件→抽象類→將類組織成為層次化結構(繼承和合成) →用類與例項進行設計和實現幾個階段。

class person(object):   # 定義乙個父類

def talk(self): # 父類中的方法

print("person is talking....")

class chinese(person): # 定義乙個子類, 繼承person類

def walk(self): # 在子類中定義其自身的方法

print('is walking...')

c = chinese()

c.talk() # 呼叫繼承的person類的方法

c.walk() # 呼叫本身的方法

# 輸出

person is talking....

is walking...

如果我們要給例項 c 傳參,我們就要使用到建構函式,那麼建構函式該如何繼承,同時子類中又如何定義自己的屬性?

繼承類的構造方法:

1.經典類的寫法: 父類名稱.__init__(self,引數1,引數2,...)

2. 新式類的寫法:super(子類,self).__init__(引數1,引數2,....)

class person(object):

def __init__(self, name, age):

self.name = name

self.age = age

self.weight = 'weight'

def talk(self):

print("person is talking....")

class chinese(person):

def __init__(self, name, age, language): # 先繼承,在重構

person.__init__(self, name, age) #繼承父類的構造方法,也可以寫成:super(chinese,self).__init__(name,age)

self.language = language # 定義類的本身屬性

def walk(self):

print('is walking...')

class american(person):

pass

c = chinese('bigberg', 22, 'chinese')

如果我們只是簡單的在子類chinese中定義乙個建構函式,其實就是在重構。這樣子類就不能繼承父類的屬性了。所以我們在定義子類的建構函式時,要先繼承再構造,這樣我們也能獲取父類的屬性了。

子類建構函式基礎父類建構函式過程如下:

例項化物件c ----> c 呼叫子類__init__()  ---- > 子類__init__()繼承父類__init__()  ----- > 呼叫父類 __init__()

如果我們對基類/父類的方法需要修改,可以在子類中重構該方法。如下的talk()方法 

class person(object):

def __init__(self, name, age):

self.name = name

self.age = age

self.weight = 'weight'

def talk(self):

print("person is talking....")

class chinese(person):

def __init__(self, name, age, language):

person.__init__(self, name, age)

self.language = language

print(self.name, self.age, self.weight, self.language)

def talk(self): # 子類 重構方法

print('%s is speaking chinese' % self.name)

def walk(self):

print('is walking...')

c = chinese('bigberg', 22, 'chinese')

c.talk()

# 輸出

bigberg 22 weight chinese

bigberg is speaking chinese

class schoolmember(object):

'''學習成員基類'''

member = 0

def __init__(self, name, age, ***):

self.name = name

self.age = age

self.*** = ***

self.enroll()

def enroll(self):

'註冊'

print('just enrolled a new school member [%s].' % self.name)

schoolmember.member += 1

def tell(self):

print('----%s----' % self.name)

for k, v in self.__dict__.items():

print(k, v)

print('----end-----')

def __del__(self):

print('開除了[%s]' % self.name)

schoolmember.member -= 1

class teacher(schoolmember):

'教師'

def __init__(self, name, age, ***, salary, course):

schoolmember.__init__(self, name, age, ***)

self.salary = salary

self.course = course

def teaching(self):

print('teacher [%s] is teaching [%s]' % (self.name, self.course))

class student(schoolmember):

'學生'

def __init__(self, name, age, ***, course, tuition):

schoolmember.__init__(self, name, age, ***)

self.course = course

self.tuition = tuition

self.amount = 0

def pay_tuition(self, amount):

print('student [%s] has just paied [%s]' % (self.name, amount))

self.amount += amount

t1 = teacher('wusir', 28, 'm', 3000, 'python')

t1.tell()

s1 = student('haitao', 38, 'm', 'python', 30000)

s1.tell()

s2 = student('lichuang', 12, 'm', 'python', 11000)

print(schoolmember.member)

del s2

print(schoolmember.member)

# 輸出

----end-----

just enrolled a new school member [haitao].

----haitao----

age 38

*** m

name haitao

amount 0

course python

tuition 30000

----end-----

just enrolled a new school member [lichuang].

3開除了[lichuang]

2開除了[wusir]

開除了[haitao]

python 類 繼承 python 類的繼承

1 所用的類都可以被繼承 2 沒有繼承其他類的類必然有乙個父類 object 3子類可以擁有父類的 init 裡的類容 派生子類除了父類的一些屬性,還會有自己的屬性和方法,這些就叫派生 如何使用 實現 class animal def init self,name,attack,hp self.na...

Python 類的繼承

有兩個模組 file1.py 和 file2.py file2中有個基類base def abc self return function abc and name self class base object def init self,name self.name name defrun sel...

Python 類的繼承

python中類的繼承,子類擁有繼承父類的方法和屬性,這一點上,與object c中是一樣的,整體上python語法和object c語法很想,但是swift與python這兩者是更像的語法上class parent 定義父類 parentattr 100 def init self print 呼...