1、繼承
類的繼承幫助我們簡化了類的編寫,這裡我們先來理解一下繼承的概念。
乙個類繼承另乙個類時,它將自動獲得另乙個類的所有屬性和方法,被繼承的類是父類,繼承得到的類是子類。我們可以將子類視為父類的特殊化,它在類的定義中對父類的屬性和方法進行了特殊化的補充(實際上也可以什麼都不補充,但這樣做繼承就沒有意義了)。
a 子類構造器
class
pet():
# 類名的命名規則遵循駝峰命名法,一般不採用下劃線,並且要注意大小寫
def__init__
(self, name, age)
: self.name = name
self.age = age
defget_name
(self)
:print
("the pet's name is "
+ self.name +
".")
class
dog(pet)
:# 繼承時,必須在括號內指定父類名稱
def__init__
(self, name, age)
:super()
.__init__(name, age)
my_dog = dog(
'mike',1
)my_dog.get_name(
)
執行結果為:
the pet's name is mike.
這裡注意,建立子類時,父類必須包含在當前檔案中,且位於子類前面。定義子類時,子類名的括號內必須包含它所繼承的父類類名,乙個類只能唯一繼承另乙個類。
super() 函式是乙個梯子,它使得子類可以在定義時自由的訪問父類的成員,例子中的**是在子類的構造器中呼叫父類的構造器,實際上這一行時必須的,因為子類會繼承父類所有的屬性,因此我們在定義子類構造器時可以先初始化從父類中繼承得到的屬性。
b 子類的特有屬性和方法
當我需要定義乙個子類時,通常是因為我們需要對已有的父類進行屬性和方法上的補充。我們來看例子:
class
pet():
# 類名的命名規則遵循駝峰命名法,一般不採用下劃線,並且要注意大小寫
def__init__
(self, name, age)
: self.name = name
self.age = age
defget_name
(self)
:print
("the pet's name is "
+ self.name +
".")
class
dog(pet)
:# 繼承時,必須在括號內指定父類名稱
def__init__
(self, name, age, dog_type)
:super()
.__init__(name, age)
self.dog_type = dog_type
defget_dog_type
(self)
:print
(self.name +
" is a "
+ self.dog_type +
".")
my_dog = dog(
'mike',1
,'husky'
)my_dog.get_name(
)my_dog.get_dog_type(
)
執行結果為:
the pet's name is mike.
mike is a husky.
定義子類時我們可以根據需要補充任意數量的屬性和方法,和定義乙個普通的類相同,屬性必須在構造器內完成初始化,方法必須包含形參self。
c 父類方法重寫
在子類的方法中可以對父類的方法進行重寫,即重新定義父類的方法,使其具備不一樣的功能(主要是為了符合子類的特殊化需求),重寫的方法只要注意保持方法名相同即可。
class
pet():
# 類名的命名規則遵循駝峰命名法,一般不採用下劃線,並且要注意大小寫
def__init__
(self, name, age)
: self.name = name
self.age = age
defget_name
(self)
:print
("the pet's name is "
+ self.name +
".")
class
dog(pet)
:# 繼承時,必須在括號內指定父類名稱
def__init__
(self, name, age, dog_type)
:super()
.__init__(name, age)
self.dog_type = dog_type
defget_name
(self)
:print
(self.name)
defget_dog_type
(self)
:print
(self.name +
" is a "
+ self.dog_type +
".")
my_dog = dog(
'mike',1
,'husky'
)my_dog.get_name(
)my_dog.get_dog_type(
)pet = pet(
'marry',2
)pet.get_name(
)
執行結果為:
mike
mike is a husky.
the pet's name is marry.
這裡注意,只有子類的物件呼叫函式get_name()時才會執行重寫後的功能,父類的物件仍然執行重寫前的功能。一定要注意區分。
d 特殊的屬性——例項
這裡我就簡單提一句,不做樣例補充。類的屬性可以是任何資料結構,甚至是已有的類的例項,實際上這樣的情況很常見,我們只需要將類的定義部分看作正常程式,這是很好理解的。
2、類的匯入
匯入的語法我在函式的學習部分已經講過,需要注意的情況大致相同,這裡就講一下一般格式。
a 從乙個模組中匯入單個類
from module_name import class_name
b 從乙個模組中匯入多個類
from module_name import class_0, class_1, class_2
c 匯入整個模組
from module_name
這裡需要注意一點,我們在訪問模組中的類時需要使用句點表示法module_name.class_name
d 匯入模組中所有的類
from module_name import
*
與函式部分講的相同,個人不建議這種匯入方式。
這個部分講的比較簡單,主要是因為和函式部分講過的匯入非常相似,無論是注意點還是用法,大家可以參照==函式深入(2)==那一篇的例子自己舉例理解類的匯入,因為模組與匯入是python專案的根基,一定要詳細理解,熟練掌握。
Python學習筆記(十三) 類
本節主要對python中類的概念進行介紹。類完全由物件導向概念所引出。定義乙個類 class people 幫助資訊 number 100 建構函式,初始化方法,當建立乙個類的時候,首先會呼叫它 def init self,name,age self.name name self.age age d...
python自學(十三) 類的繼承
類是可以繼承的,python也不例外 直接將父類作為引數來宣告乙個新類 class student object 這裡就是指,預設的類的宣告,就是繼承自object def init self pass 子類直接具有了父類的屬性和方法 但是當子類宣告和父類相同的方法時,會覆蓋父類的方法,這種行為被稱...
十三)類的操作
1 物件的建立 有七種a a 3 b 3,c a 3 d a e a,f new a 3 h new a a a 2 指標與引用 一 指標,物件使用指標 用 進行操作 作為函式的引數 作為類的資料或成員。二 引用,傳送大物件要比按值傳送更快,避免了複製過程,拷貝建構函式就是利用這點。3 前向宣告 當...