㈠ python 繼承與類屬性的使用
題主的注釋是沒有問題的。
子類繼承父類後,會自動繼承了父類的屬性。如果在子類中修改了繼承得來的類屬性時(即B.count=200),並不會修改父類的對應的同名類屬性(A.count)。以後只要是通過子類訪問該屬性,訪問的都是子類的屬性。
通過父類修改了父類屬性後,子類訪問該屬性時,會訪問父類修改後的屬性值。當然前提是子類沒有對該屬性重新賦值過。
㈡ Python子類繼承,如果不用父類的函數和方法,應該怎麼寫
子類繼承父類時,如果父類有需要初始化的屬性,那麼必須在子類中調用父類的初始化方法,幫助父類進行初始化,否則,子類可以不調用父類的初始化方法
代碼示例
"""
父類Car中沒有屬性需要初始化,所有子類中也不需要調用父類的初始化方法
"""
classCar:
defshow_name(self):
print('carname')
classEeleCar(Car):
pass
car=EeleCar()
car.show_name()
㈢ Python中的面向對象(進階)
一、實例方法,類方法,靜態方法
我們首先寫一個類,裡麵包含這三種方法。
可以看到,我們用到了兩個裝飾器。
我們用類和實例分別調用下類方法
我們用類和實例分別調用下靜態方法
靜態方法其實就是把一個普通的函數寫在類里,與直接在外層寫一個函數是一樣的,本質上是一個函數。
為了方便理解,我們分別列印下這些方法的類型
通過type()查看對象是方法還是函數
此外,還可以通過inspect模塊判斷某個對象是否是某種類型,返回布爾值。
用法
小Tips:概念理解
直接def定義的,我們叫做函數
把函數放到類里,我們叫做方法
方法可以通過裝飾器staticmethod轉為(放在方法里的)函數
繼承
一個類繼承另一個類時,會自動獲得另一個類的所有屬性和方法,被繼承的類稱之為父類,新類稱為子類。子類擁有父類所有的屬性和方法,並且可以定義自己的屬性和方法
我們以上邊的Rectangle類為父類來試一下
1)完全繼承
可以看到,子類完全繼承父類後,可以直接調用父類的所有方法。
2)部分繼承
部分繼承:繼承父類後,修改父類的同名方法
我們試一下,Square繼承Rectangle後,修改__init__()方法
3)拓展父類的方法
在保留父類中某個方法的代碼同時,對方法進行拓展
可以在方法中加入"super().方法名"來實現
4)@property
㈣ python中的self
首先,對於python,只有針對類來說的self才有意義,所以python中的self,說的即是python類中的self。
以下我將結合python類的相關概念敘述,必須明確的是,self只能用在python類的方法(即函數)中。
在我看來,python的類有三個相關概念:屬性(即變數)、方法(即函數)、繼承。
1.屬性(即變數)
(1)如果變數定義在類下面而不是類的方法下面,那這個變數既是類的屬性也是類實例的屬性。
(2)如果變數定義在類的方法下面,如果加了self,那這個變數就是類實例的屬性,不是類的屬性;如果沒有加self,這個變數只是這個方法的局部變數,既不是類的屬性也不是類實例的屬性。
2.方法(即函數)
(1)如果在類中定義函數時加了self,那這個函數是類實例的方法,而不是類的方法。
(2)如果在類中定義函數時候沒有加self,那這個函數就只是類的方法,而不是類實例的方法。
3.繼承
通俗的講,子類繼承父類,也就是子類繼承了父類的屬性和方法,相當於把父類的屬性和方法的定義直接加到子類里來,這個時候以子類為主。
說明 :以上闡述是基於我個人的理解用最直觀的語言進行的總結,如果有錯誤歡迎提出
㈤ 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根據不同的對象執行相應的內部方法。
㈥ pythonclass.function的父類是什麼
在對於python中類的使用上,我們分出了子類和父類兩種。對於這二者之間的關系,我們可以簡單理解為繼承。不過python中加入了實例的討論,那麼對於繼承後的子類來說,父類的實例是否被繼承又是我們所需要思考的問題。下面我們就子類和父類進行簡單介紹,然後就二者之間的繼承關系重點分析。
1.概念
子類和父類主要描述的是類之間的繼承關系,即所屬關系。繼承的類可在被繼承的類的基礎上添加格外的參數和行為,新類稱為子類,擴展類;被繼承的類稱為基類、父類或者超類。
2.繼承關系
子類與父類的關系是 「is」 的關系,如上 Cat 繼承於 Animal 類,我們可以說:
「A」是 Animal 類的實例,但,「A」不是 Cat 類的實例。
「C」是 Animal 類的實例,「C」也是 Cat 類的實例。
判斷對象之間的關系,我們可以通過 isinstance (變數,類型) 來進行判斷:
print('"A" IS Animal?', isinstance(A, Animal))
print('"A" IS Cat?', isinstance(A, Cat))
print('"C" IS Animal?', isinstance(C, Animal))
print('"C" IS Cat?', isinstance(C, Cat))
Python實現子類調用父類的方法
python和其他面向對象語言類似,每個類可以擁有一個或者多個父類,它們從父類那裡繼承了屬性和方法。如果一個方法在子類的實例中被調用,或者一個屬性在子類的實例中被訪問,但是該方法或屬性在子類中並不存在,那麼就會自動的去其父類中進行查找。
繼承父類後,就能調用父類方法和訪問父類屬性,而要完成整個集成過程,子類是需要調用的構造函數的。
子類不顯式調用父類的構造方法,而父類構造函數初始化了一些屬性,就會出現問題
如果子類和父類都有構造函數,子類其實是重寫了父類的構造函數,如果不顯式調用父類構造函數,父類的構造函數就不會被執行,導致子類實例訪問父類初始化方法中初始的變數就會出現問題。
㈦ Python的類和對象入門
本文來說說Python中的類與對象,Python這門語言是無處不對象,如果你曾淺要了解過Python,你應該聽過Python是一種面向對象編程的語言,所以你經常可能會看到面向「對象」編程這類段子,而面向對象編程的語言都會有三大特徵:封裝、繼承、多態。
我們平時接觸到的很多函數、方法的操作都具有這些性質,我們只是會用,但還沒有去深入了解它的本質,下面就介紹一下關於類和對象的相關知識。
封裝這個概念應該並不陌生,比如我們把一些數據封裝成一個列表,這就屬於數據封裝,我們也可以將一些代碼語句封裝成一個函數方便調用,這就是代碼的封裝,我們也可以將數據和代碼封裝在一起。用術語表示的話,就是可以將屬性和方法進行封裝,從而得到對象。
首先我們可以定義一個類,這個類中有屬性和方法,但有的夥伴會比較好奇,屬性和方法不是會封裝成對象嘛,為什麼又變成類了?舉個例子,類就好比是一個毛坯房,而對象是在毛坯房的基礎上改造成的精裝房。
在類定義完成時就創建了一個類對象,它是對類定義創建的命名空間進行了一個包裝。類對象支持兩種操作:屬性引用和實例化。
屬性引用的語法就是一般的標准語法:obj.name。比如XiaoMing.height和XiaoMing.run就是屬性引用,前者會返回一條數據,而後者會返回一個方法對象。
這里也支持對類屬性進行賦值操作,比如為類中的weight屬性賦予一個新值。
而類的實例化可以將類對象看作成一個無參函數的賦值給一個局部變數,如下:
ming就是由類對象實例化後創建的一個實例對象,通過實例對象也可以調用類中的屬性和方法。
類在實例化過程中並不都是像上面例子一樣簡單的,一般類都會傾向將實例對象創建為有初始狀態的,所以在類中可能會定義一個__init__的魔法方法,這個方法就可以幫助接收、傳入參數。
而一個類如果定義了__init__方法,那麼在類對象實例化的過程中就會自動為新創建的實例化對象調用__init__方法,請看下面這個例子。
可以看到在__init__()中傳入了參數x和y,然後在print_coor中需要接收參數x和y,接下來通過實例化這個類對象,驗證一下參數是否能通過__init__()傳遞到類的實例化操作中。
所謂繼承就是一個新類在另一個類的基礎上構建而成,這個新類被稱作子類或者派生類,而另一個類被稱作父類、基類或者超類,而子類會繼承父類中已有的一些屬性和方法。
比如上面這個例子,我並沒有將list_定義成一個列表,但它卻能調用append方法。原因是類Mylist繼承於list這個基類,而list_又是Mylist的一個實例化對象,所以list_也會擁有父類list擁有的方法。當然可以通過自定義類的形式實現兩個類之間的繼承關系,我們定義Parent和Child兩個類,Child中沒有任何屬性和方法,只是繼承於父類Parent。
當子類中定義了與父類中同名的方法或者屬性,則會自動覆蓋父類對應的方法或屬性,還是用上面這個例子實現一下,方便理解。
可以看到子類Child中多了一個和父類Parent同名的方法,再實例化子類並調用這個方法時,最後調用的是子類中的方法。Python中繼承也允許多重繼承,也就是說一個子類可以繼承多個父類中的屬性和方法,但是這類操作會導致代碼混亂,所以大多數情況下不推薦使用,這里就不過多介紹了。
多態比較簡單,比如定義兩個類,這兩個類沒有任何關系,只是兩個類中有同名的方法,而當兩個類的實例對象分別調用這個方法時,不同類的實例對象調用的方法也是不同的。
上面這兩個類中都有introce方法,我們可以實例化一下兩個類,利用實例對象調用這個方法實現一下多態。
判斷一個類是否是另一個類的子類,如果是則返回True,反之則返回False。
需要注意的有兩點:
判斷一個對象是否為一個類的實例對象,如果是則返回True,反之則返回False。
需要注意的有兩點:
判斷一個實例對象中是否包含一個屬性,如果是則返回True,反之則返回False。
需要注意的是第二個參數name必須為字元串形式傳入,如果不是則會返回False。
㈧ Python二次父類繼承如何拿到其他子類修改後的結果
在這個代碼中,你想要讓 C 類拿到 B 類修改後的 self.name 屬性,你可以在 C 類的 test() 方法中調用 super() 函數來調用 B 類的 test() 方法,從而獲取 B 類修改後的 self.name 屬性。
例如,你可以這樣修改 C 類的 test() 方法:
class C(B):
def test(self):
super().test() # 調用 B 類的 test() 方法
print("-", self.name) # 輸出 B 類修改後的 self.name 屬性
print("_", self.aaa)
這樣,當你調用 C 類的 test() 方法時,會先調用 B 類的 test() 方法,然後在 B 類的 test() 方法中修改 self.name 屬性,最後在 C 類的 test() 方法中輸出 B 類修改後的 self.name 屬性。
如果你還有其他問題,請隨時追問。
㈨ Python繼承父類parent的正確格式為
格式:
class 子類名(父類1,父類2)
類的繼承就是讓子類擁有父類的屬性和方法。
幾個注意:py支持多繼承
子類繼承的父類只能初始化一次,如果父類1和父類2有共同的父類或者祖先類,則類初始化的時候會失敗。
當父類具有相同方法時,會調用最先繼承的父類中的方法,如果要指定父類,則需要重寫此方法,並通過父類名.方法名來調用指定父類方法。