2019-9-6
Python類的定義與使用
- 類:描述具有相同屬性和方法的對象的集合
- 類變量:在整個實例化的對象中是公用的,類變量定義在類中且在函數體之外,類變量通常不作爲實例變量使用
- 方法重寫:如果從父類繼承的方法不能滿足子類的需求,可以對其進行改寫,這個過程叫方法的
- 覆蓋(override),也稱爲方法的重寫
- 局部變量:定義在方法中的變量,只作用於當前實例的類
- 實例變量:在類的聲明中,屬性是用變量來表示的,是在類聲明的內部但是在類的其他成員方法之外聲明的
- 繼承:即一個派生類繼承基類的字段和方法
- 實例化:創建一個類的實例,類的具體對象
- 對象:通過類定義的數據結構實例。對象包括兩個數據成員(類變量和實例變量)和方法
1、類的定義
語法:
class <類名稱>:
["文件字符串"] #類文檔字符串
<語句> #類體,由類成員、方法、數據屬性組成
class Car(object): #定義一個類,派生自object類
def infor(self): #定義成員方法
print("This is a car")
2、構造方法
- 類的構造方法或初始化方法,當創建了這個類的實例時就會調用該方法
- 實例化對象時時可以傳入參數的,這些參數會自動傳入_ init _()方法中,可以通過重寫這個方法來定義對象的初始化操作
- 定義構造方法時,self是必要的參數且爲第一個參數
- 若在Python中定義類時沒有定義_init_()方法,則在實例化時系統會自動調用默認的構造方法(無參的_init_()方法)
- 一個類中可以定義多個構造方法,但是實例化類時只會實例化最後的構造方法,即後面的構造方法會覆蓋前面的構造方法,並且需要根據最後一個構造方法的形式進行實例化(參數與最後一個構造方法的參數一致),因此一個類中最好只定義一個構造方法
- 初始化實例包括:定義和初始化實例屬性或調用類的一些方法
語法:
def_init_(self):
<語句>
class Myclass:
i=612
def __init__(self,you):
self.you=you
def func(self,me):
self.me=me
return self.me+" like "+self.you
user=Myclass("lion")
print("調用類的屬性:",user.i)
print("調用類的方法:",user.func("monkey"))
調用類的屬性:612
調用類的方法:monkey like lion
分析這段代碼,一開始看着有點打腦殼,跟Java面向對象類的定義存在很多不一樣。在定義類中函數時,通常需要將函數的第一個參數定義成self,而self指向對象本身。下面一個例子
class Breakfast:
def set_name(self,name):
self.name=name
def get_name(self):
return self.name
a=Breakfast()
b=Breakfast()
a.set_name("milk")
b.set_name("bread")
print(a.get_name())
print(b.get_name())
milk
bread
對象a,b在分別調用set_name()和get_name()方法時,self分別指向了a,b,即對象自身。
3、內置類屬性
①_dict_:類的屬性(包含一個字典,由類的數據屬性組成)
②_doc_:類的文檔字符串
③_name_:類名
④_module_:類定義所在的模塊(類的全名稱是’_ main _.className’,如果類位於一個導入模塊mymod中,那麼className._module _等於mymod)
⑤_bases _:類的所有父類構成元素(包含了由父類組成的元組)
4、類的實例
①創建類實例
car = Car() #實例化對象
car.infor() #調用對象的成員方法
//這裏輸出:This is a car
②內置函數isinstance()
作用:測試一個對象是否爲某個類的實例
>>>isinstance(car,Car)
True
③內置函數type()
作用:查看對象類型
>>>type(car)
<class'_ _main_ _.Car'>