導航:首頁 > 編程語言 > python中的繼承用法

python中的繼承用法

發布時間:2023-12-16 02:47:04

『壹』 python類的繼承和多態代碼詳解

Python類的繼承和多態代碼詳解
Python類的繼承
在OOP(ObjectOrientedProgramming)程序設計中,當我們定義一個class的時候,可以從某個現有的class繼承,新的class稱為子類(Subclass),而被繼承的class稱為基類、父類或超類(Baseclass、Superclass)。
我們先來定義一個classPerson,表示人,定義屬性變數name及sex(姓名和性別);
定義一個方法print_title():當sex是male時,printman;當sex是female時,printwoman。參考如下代碼:
class Person(object):
def __init__(self,name,sex):
self.name = name
self.sex = sex

def print_title(self):
if self.sex == "male":
print("man")
elif self.sex == "female":
print("woman")

class Child(Person): # Child 繼承 Person
pass

May = Child("May","female")
Peter = Person("Peter","male")

print(May.name,May.sex,Peter.name,Peter.sex) # 子類繼承父類方法及屬性
May.print_title()
Peter.print_title()

而我們編寫Child類,完全可以繼承Person類(Child就是Person);使用classsubclass_name(baseclass_name)來表示繼承;

繼承有什麼好處?最大的好處是子類獲得了父類的全部屬性及功能。如下Child類就可以直接使用父類的print_title()方法

實例化Child的時候,子類繼承了父類的構造函數,就需要提供父類Person要求的兩個屬性變數name及sex:

在繼承關系中,如果一個實例的數據類型是某個子類,那它也可以被看做是父類(May既是Child又是Person)。但是,反過來就不行(Peter僅是Person,而不是Child)。

繼承還可以一級一級地繼承下來,就好比從爺爺到爸爸、再到兒子這樣的關系。而任何類,最終都可以追溯到根類object,這些繼承關系看上去就像一顆倒著的樹。比如如下的繼承樹:

isinstance()及issubclass()

Python與其他語言不同點在於,當我們定義一個class的時候,我們實際上就定義了一種數據類型。我們定義的數據類型和Python自帶的數據類型,比如str、list、dict沒什麼兩樣。

Python有兩個判斷繼承的函數:isinstance()用於檢查實例類型;issubclass()用於檢查類繼承。參見下方示例:
class Person(object):
pass

class Child(Person): # Child 繼承 Person
pass

May = Child()
Peter = Person()

print(isinstance(May,Child)) # True
print(isinstance(May,Person)) # True
print(isinstance(Peter,Child)) # False
print(isinstance(Peter,Person)) # True
print(issubclass(Child,Person)) # True

Python類的多態

在說明多態是什麼之前,我們在Child類中重寫print_title()方法:若為male,printboy;若為female,printgirl
class Person(object):
def __init__(self,name,sex):
self.name = name
self.sex = sex

def print_title(self):
if self.sex == "male":
print("man")
elif self.sex == "female":
print("woman")

class Child(Person): # Child 繼承 Person
def print_title(self):
if self.sex == "male":
print("boy")
elif self.sex == "female":
print("girl")

May = Child("May","female")
Peter = Person("Peter","male")

print(May.name,May.sex,Peter.name,Peter.sex)
May.print_title()
Peter.print_title()
當子類和父類都存在相同的print_title()方法時,子類的print_title()覆蓋了父類的print_title(),在代碼運行時,會調用子類的print_title()
這樣,我們就獲得了繼承的另一個好處:多態。
多態的好處就是,當我們需要傳入更多的子類,例如新增Teenagers、Grownups等時,我們只需要繼承Person類型就可以了,而print_title()方法既可以直不重寫(即使用Person的),也可以重寫一個特有的。這就是多態的意思。調用方只管調用,不管細節,而當我們新增一種Person的子類時,只要確保新方法編寫正確,而不用管原來的代碼。這就是著名的「開閉」原則:
對擴展開放(Openforextension):允許子類重寫方法函數
對修改封閉(Closedformodification):不重寫,直接繼承父類方法函數
子類重寫構造函數
子類可以沒有構造函數,表示同父類構造一致;子類也可重寫構造函數;現在,我們需要在子類Child中新增兩個屬性變數:mother和father,我們可以構造如下(建議子類調用父類的構造方法,參見後續代碼):
class Person(object):
def __init__(self,name,sex):
self.name = name
self.sex = sex

class Child(Person): # Child 繼承 Person
def __init__(self,name,sex,mother,father):
self.name = name
self.sex = sex
self.mother = mother
self.father = father

May = Child("May","female","April","June")
print(May.name,May.sex,May.mother,May.father)

Person
若父類構造函數包含很多屬性,子類僅需新增1、2個,會有不少冗餘的代碼,這邊,子類可對父類的構造方法進行調用,參考如下:
class Person(object):
def __init__(self,name,sex):
self.name = name
self.sex = sex

class Child(Person): # Child 繼承 Person
def __init__(self,name,sex,mother,father):
Person.__init__(self,name,sex) # 子類對父類的構造方法的調用
self.mother = mother
self.father = father

May = Child("May","female","April","June")
print(May.name,May.sex,May.mother,May.father)

多重繼承

多重繼承的概念應該比較好理解,比如現在需要新建一個類baby繼承Child,可繼承父類及父類上層類的屬性及方法,優先使用層類近的方法,代碼參考如下:
class Person(object):
def __init__(self,name,sex):
self.name = name
self.sex = sex

def print_title(self):
if self.sex == "male":
print("man")
elif self.sex == "female":
print("woman")

class Child(Person):
pass

class Baby(Child):
pass

May = Baby("May","female") # 繼承上上層父類的屬性
print(May.name,May.sex)
May.print_title() # 可使用上上層父類的方法

class Child(Person):
def print_title(self):
if self.sex == "male":
print("boy")
elif self.sex == "female":
print("girl")

class Baby(Child):
pass

May = Baby("May","female")
May.print_title() # 優先使用上層類的方法
總結
以上就是本文關於Python類的繼承和多態代碼詳解的全部內容,希望對大家有所幫助。

『貳』 Python類的繼承與多態詳細介紹

類(Class): 用來描述具有相同的屬性和方法的對象的集合。

類變數:類變數在整個實例化的對象中是公用的。類變數定義在類中且在函數體之外。類變數通常不作為實例變數使用。

類有一個名為 __init__() 的特殊方法(構造方法),該方法在類實例化時會自動調用

self:self 代表的是類的實例,代表當前對象的地址,而 self.class 則指向類。

類調用 Car.weight

實例化 car01=Car(5)

實例對象調用 car01.weght

我們在構造類時,Python3默認我們繼承了object這個基類,我個人理解object就是個空的類,可以不用管為何要在括弧中寫上object,這是Python3的特性,在python2中如果你沒有寫object的話不會默認繼承了object這個基類。

同樣的我們自己希望繼承的父類只需要把objetc改為我們自己定義的類名即可。子類中可以擁有父類中所有的公有屬性和方法,但是可以通過在變數名前加下劃線使其變為私有,這樣子類就不可以訪問父類中的成員了。

以下三個公交車類的父類均為客車類,我們可以寫一個funcs方法使得每次調用funcs方法時,傳入不同的對象以執行不同的func方法,具體實現如下:

主函數

可以看到,我將小 汽車 實例化為帶有重量為5t的一個具體對象,將客車實例化為帶有重量為20t的一個具體對象,將三個公交車實例化為帶有重量為15t的一個具體對象.

如上圖所示,我每次在調用funcs方法時都傳入了一個實例化對象,funcs根據不同的對象執行相應的內部方法。

『叄』 python繼承是什麼意思

Python是一種解釋型、面向對象、動態數據類型的高級程序設計語言。
Python從設計之初就已經是一門面向對象的語言,正因為如此,在Python中創建一個類和對象是很容易的。
python繼承是什麼意思?
python繼承:即一個派生類(derived class)繼承基類(base class)的欄位和方法。繼承也允許把一個派生類的對象作為一個基類對象對待。
例如,有這樣一個設計:一個Dog類型的對象派生自Animal類,這是模擬"是一個(is-a)"關系(例圖,Dog是一個Animal)。
相關推薦:《Python教程》以上就是小編分享的關於python繼承是什麼意思的詳細內容希望對大家有所幫助,更多有關python教程請關注環球青藤其它相關文章!

『肆』 python中的繼承和多態

繼承:在已有類的基礎上創建新類,這其中的一種做法就是讓一個類從另一個類那裡將屬性和方法直接繼承下來,從而減少重復代碼的編寫。
1.提供繼承信息的我們稱之為父類,也叫超類或基類;2.得到繼承信息的我們稱之為子類,也叫派生類或衍生類。3.子類除了繼承父類提供的屬性和方法,還可以定義自己特有的屬性和方法,所以子類比父類擁有的更多的能力
多態:子類在繼承了父類的方法後,通過方法重寫我們可以讓父類的同一個行為在子類中擁有不同的實現版本,這個就是多態。

『伍』 Python中繼承的理解與運用

9.5. 繼承
當然,如果一種語言不支持繼承就,「類」就沒有什麼意義。派生類的定義如下所示:
class DerivedClassName(BaseClassName):

命名 BaseClassName (示例中的基類名)必須與派生類定義在一個作用域內。除了類,還可以用表達式,基類定義在另一個模塊中時這一點非常有用:
class DerivedClassName(modname.BaseClassName):
派生類定義的執行過程和基類是一樣的。構造派生類對象時,就記住了基類。這在解析屬性引用的時候尤其有用:如果在類中找不到請求調用的屬性,就搜索基類。如果基類是由別的類派生而來,這個規則會遞歸的應用上去。
派生類的實例化沒有什麼特殊之處: DerivedClassName() (示列中的派生類)創建一個新的類實例。方法引用按如下規則解析:搜索對應的類屬性,必要時沿基類鏈逐級搜索,如果找到了函數對象這個方法引用就是合法的。
派生類可能會覆蓋其基類的方法。因為方法調用同一個對象中的其它方法時沒有特權,基類的方法調用同一個基類的方法時,可能實際上最終調用了派生類中的覆蓋方法。(對於 C++ 程序員來說,Python 中的所有方法本質上都是 虛 方法。)
派生類中的覆蓋方法可能是想要擴充而不是簡單的替代基類中的重名方法。有一個簡單的方法可以直接調用基類方法,只要調用: BaseClassName.methodname(self, arguments)。有時這對於客戶也很有用。(要注意只有 BaseClassName 在同一全局作用域定義或導入時才能這樣用。)
Python 有兩個用於繼承的函數:
函數 isinstance() 用於檢查實例類型: isinstance(obj, int) 只有在 obj.__class__ 是 int 或其它從 int 繼承的類型
函數 issubclass() 用於檢查類繼承: issubclass(bool, int) 為 True,因為 bool 是 int 的子類。
然而, issubclass(float, int) 為 False,因為 float 不是 int 的子類。

『陸』 Python中的繼承是什麼意思

繼承是子類復用父類的屬性和方法的機制,類的繼承是以生活中繼承為靈感設計的。

生活中繼承的例子有很多,例如,汽車的發展歷程就體現了繼承。最早汽車的輪胎都是實心的,功能少,性能差,而如今汽車的功能越來越多,性能越來越好,這是經過一代一代的發展而來的,每一代比上一代擴充了一些功能,改進了一些性能。縱觀整個汽車的發展史,每一代汽車都是在上一代汽車的特徵和行為的基礎之上,進行了設計和改良。這其中有些功能沒有改變,有些功能是新增的,也有些功能經過了改良。例如,從第一代的汽車到現在的汽車,做交通工具這一特點始終都在沿用。

生活中汽車的例子,與計算機中的繼承是非常相似的。這么一代又一代的更新是有好處的。

首先,節省了設計流程,不用閉門造車。

其次,在前一代汽車基礎之上設計,這樣原來重復的生產技術還可以復用,再設計一些新增的功能,這樣就能大大地提高生產效率。

下面介紹一個實際案例,來說明繼承的用處。

假設設計一個師生管理系統,具有學生和教師兩種用戶,需要設計兩個類,一個學生類(Student),一個教師類(Teacher)。Student類有學號、姓名、性別、年齡、用戶名、密碼等屬性,Teacher類有姓名、性別、年齡、用戶名、密碼、學歷等屬性,這兩個類中都有屬性的getter和setter方法。由此可知,這兩個類中有許多相同的屬性和方法,也就是說代碼有冗餘。為了避免這樣的情況,就可以使用繼承來優化設計。將Student類和Teacher類中相同的屬性和方法抽取出來,單獨作為一個父類,這個父類稱為用戶類(User),而Student類和Teacher類作為子類繼承父類User。Student類和Teacher類中就只放自己特有的屬性和方法即可。由於這兩個類都繼承User類,因此User類中的屬性和方法,它們可以直接使用。需要指出的是,在繼承中私有屬性和私有方法是不能被繼承的。

繼承提高了代碼的重用性,減少了代碼和數據的冗餘度。另外,如果要修改用戶名屬性,不採用繼承的情況下,兩個類的屬性都需要修改,而使用繼承後,只需要修改父類的用戶名屬性即可。由此可知,繼承使代碼的修改更加方便。

關於Python的基礎問題可以看下這個網頁的視頻教程,網頁鏈接,希望我的回答能幫到你。

『柒』 Python繼承父類parent的正確格式為

格式:

class 子類名(父類1,父類2)

類的繼承就是讓子類擁有父類的屬性和方法。

幾個注意:py支持多繼承

子類繼承的父類只能初始化一次,如果父類1和父類2有共同的父類或者祖先類,則類初始化的時候會失敗。

當父類具有相同方法時,會調用最先繼承的父類中的方法,如果要指定父類,則需要重寫此方法,並通過父類名.方法名來調用指定父類方法。

閱讀全文

與python中的繼承用法相關的資料

熱點內容
流媒體伺服器有什麼用 瀏覽:171
安卓怎麼禁用前置攝像頭 瀏覽:48
android電視游戲 瀏覽:670
得物app用什麼方式出售 瀏覽:783
linuxandroid模擬器下載 瀏覽:971
php類常量訪問 瀏覽:586
視頻文件壓縮工具 瀏覽:13
什麼什麼佳人app 瀏覽:6
施耐德cfc編程 瀏覽:322
如何把pdf文件轉成圖片 瀏覽:538
張劍閱讀150篇pdf 瀏覽:359
拉卡拉收款寶app叫什麼名 瀏覽:340
c4d動態解壓 瀏覽:711
多個pdf合並為一個 瀏覽:314
程序中的編譯執行 瀏覽:34
plc控制與單片機控制 瀏覽:884
如何讓安卓手機操控電腦 瀏覽:189
電腦電銷加密電話號碼破解 瀏覽:507
世界史綱pdf 瀏覽:135
湖北社保年審app叫什麼名字 瀏覽:854