導航:首頁 > 編程語言 > python多態

python多態

發布時間:2022-02-16 13:45:21

python中的繼承和多態

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

② Python面向對象編程之繼承與多態詳解

Python面向對象編程之繼承與多態詳解
本文實例講述了Python面向對象編程之繼承與多態。分享給大家供大家參考,具體如下:
Python 類的繼承
在OOP(Object Oriented Programming)程序設計中,當我們定義一個class的時候,可以從某個現有的class 繼承,新的class稱為子類(Subclass),而被繼承的class稱為基類、父類或超類(Base class、Super class)。
我們先來定義一個class Person,表示人,定義屬性變數 name 及 sex (姓名和性別);
定義一個方法print_title():當sex是male時,print man;當sex 是female時,print woman。參考如下代碼:
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);使用 class subclass_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,print boy;若為female,print girl
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的子類時,只要確保新方法編寫正確,而不用管原來的代碼。這就是著名的「開閉」原則:

對擴展開放(Open for extension):允許子類重寫方法函數

對修改封閉(Closed for modification):不重寫,直接繼承父類方法函數

子類重寫構造函數

子類可以沒有構造函數,表示同父類構造一致;子類也可重寫構造函數;現在,我們需要在子類 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)

若父類構造函數包含很多屬性,子類僅需新增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的多態性,代碼這樣寫,對嗎

不行,一個class只能有一個用於構造對象的__init__函數但python中的變數是無類型的,因此傳給__init__的參數可以是任何類型python中的函數參數在定義時可以有默認值,可以讓__init__函數接受多個參數,在後面的一些參數給出默認值的方法讓__init__接受不同個數的參數,並且執行類型檢查執行不同的代碼,用上述方法實現類的構造函數的多態性

java 多態與python多態

不一樣。java的class只能繼承一個parent,需要interface或者需要parent是abstract class;python的class可以繼承多個parent,所以不需要interface,另外,因為python是dynamically typed,所以即使完全不繼承parent,也可以做到多態。

⑤ python如何實現多態

python本來就是多態的
python的變數是沒有類型的,只有指向的對象是有類型的,所有方法的調用都是調用對象的方法,不存在不多態的情況

⑥ python中的繼承和多態用英文怎麼表示

繼承是 Inheritance
多態是 Polymorphism

⑦ Python中的多態

times函數為例談談多態,就像我們看到的那樣,times函數中表達式×*y的意義完全取決於x和y的對象類型,同樣的函數,在一個實例下執行的是乘法,在另一個實例下執行的卻是重復。Python把對某一對象在某種語法下的合理性交給那個對象自身來判斷。實際上,*作為一個分派機制,將執行的控制權移交給被處理的對象。
這種依賴類型的行為稱為多態,其含義就是一個操作的意義取決於被操作對象的類型。因為Python是動態類型語言,所以多態在Python中隨處可見。事實上,在 Python中所有操作都是多態的操作:print、index、*運算符,以及更多。這實際上是有意而為的,並且從很大程度上算作是這門語言簡潔性和靈活性的一個表現。例如,函數可以自動地應用到所有類別的對象上。只要對象支持所預期的介面(也稱為協議),函數就能處理它們。也就是說,如果傳給函數的對象支持預期的方法和表達式運算符,那麼它們對函數的邏輯來說就是有著即插即用的兼容性。
即使是簡單的times 函數,對任意兩個支持*的對象都可以執行,無論它是哪種類型,也不管它是何時編寫的。這個函數對於數字來說是有效的(執行乘法),或者一個字元串和一個數字(執行重復),或者任意其他支持擴展介面的兼容對象——甚至是我們尚未編寫過的基於類的對象。

⑧ Python多態和C++多態,哪個更有利

繼承就是子類繼承父類,使子類具有父類的各種屬性和方法,好處就是避免多餘的代碼出現,例如,項目中常常要用到的資料庫的開啟關閉,就可以單獨寫一個父類,其他類要用的話可以去繼承。

⑨ python中到底「多態」是什麼!!!

Python是一種純粹的面向對象語言。面向對象編程中的四大特徵分別是:抽象、封裝、繼承和多態。多態根據上下文,對象可以採用多種形式。程序將確定該對象每次執行所需的含義或用法,從而減少了重復代碼。

我國有句俗語:「龍生九子,各有不同」。這就是多態。多態是同一類事物具有的多種形態。多態是面向對象編程的重要特點之一。

Python本身就是一種多態語言:

上述程序中,調用Func()函數為同一個操作,但調用的參數是不同的,即調用了不同的實例作為參數。由運行結果可知,有不同的類創建不同的實例,以不同的實例作為參數時,調用talk()得到的列印結果是不同的,這是因為每個實例具有不同的實現方式,這就是多態性的體現。

多態性是同一個操作因作用實例不同而表現出不同實現方式的特性。多態性增加了程序的靈活性,以不變應萬變,無論實例千變萬化,使用者都是以同一種形式去調用;多態性還增加了程序可擴展性,通過繼承創建新的類,子類可以使用父類的方法,也可以使用自己重寫的方法。

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

⑩ 什麼是python多態

讓具有不同功能的函數可以使用相同的函數名,這樣就可以用一個函數名調用不同內容(功能)的函數。

Python中多態的特點
1、只關心對象的實例方法是否同名,不關心對象所屬的類型;
2、對象所屬的類之間,繼承關系可有可無;
3、多態的好處可以增加代碼的外部調用靈活度,讓代碼更加通用,兼容性比較強;
4、多態是調用方法的技巧,不會影響到類的內部設計。

閱讀全文

與python多態相關的資料

熱點內容
文件如何解壓再壓縮 瀏覽:620
使用編譯命令導入庫 瀏覽:116
app一般用什麼伺服器 瀏覽:819
手機端java編譯 瀏覽:145
電腦文件夾一右鍵就卡 瀏覽:194
javalistforeach 瀏覽:26
奇葩解壓筆 瀏覽:333
php判斷字元串開頭 瀏覽:268
多個pdf合並成一個pdf 瀏覽:733
linuxc獲取mac 瀏覽:964
linux線程運行時間 瀏覽:379
機器人逆運算演算法 瀏覽:302
腰椎壓縮性骨折屬於幾級傷殘 瀏覽:827
phonegapjavajs 瀏覽:327
設計一個簡單遺傳演算法 瀏覽:177
單片機的直流電機的pwm控制 瀏覽:448
cc在線編譯教程 瀏覽:373
Linux伺服器如何安裝win 瀏覽:591
golang演算法圖 瀏覽:698
ARM單片機開發工具 瀏覽:84