(一)Python入門-6面向對象編程:02類的定義-類和對象的關系-構造函數-實例屬性-實例方法
一:類的定義
如果把對象比作一個“餅幹”,類就是制造這個餅幹的“模具”。
我們通過類定義數據類型的屬性(數據)和方法(行為),也就是說,“類將行為和狀態打 包在一起”。
對象是類的具體實體,一般稱為“類的實例”。類看做“餅幹模具”,對象就是根據這個“模 具”制造出的“餅幹”。
從一個類創建對象時,每個對象會共享這個類的行為(類中定義的方法),但會有自己的屬 性值(不共享狀態)。更具體一點:“方法代碼是共享的,屬性數據不共享”。
Python中,“一切皆對象”。類也稱為“類對象”,類的實例也稱為“實例對象”。
定義類的語法格式如下:
class 類名:
類體
要點如下:
1. 類名必須符合“標識符”的規則;一般規定,首字母大寫,多個單詞使用“駝峰原則”。
2. 類體中我們可以定義屬性和方法。
3. 屬性用來描述數據,方法(即函數)用來描述這些數據相關的操作。
【操作】一個典型的類的定義
#類的定義 classStudent: #類名一般首字母大寫,多個單詞采用駝峰規則 def __init__(self,name,score): #self必須要有,必須位於第一個參數 self.name = name self.score = score def say_score(self): #self必須要有,必須位於第一個參數 print(‘姓名是:{0},分數是:{1}‘.format(self.name,self.score)) s1 = Student(‘jack‘,‘100‘) #通過類名()調用構造函數 s1.say_score() #其他操作 print(dir(s1)) #獲得對象的所有屬性、方法 print(s1.__dict__) #對象的屬性字典class Man: pass #空語句 print(isinstance(s1,Student)) #判斷“對象”是不是“指定類型” print(isinstance(s1,Man))
運行結果:
姓名是:jack,分數是:100
[‘__class__‘, ‘__delattr__‘, ‘__dict__‘, ‘__dir__‘, ‘__doc__‘, ‘__eq__‘, ‘__format__‘, ‘__ge__‘, ‘__getattribute__‘, ‘__gt__‘, ‘__hash__‘, ‘__init__‘, ‘__init_subclass__‘, ‘__le__‘, ‘__lt__‘, ‘__module__‘, ‘__ne__‘, ‘__new__‘, ‘__reduce__‘, ‘__reduce_ex__‘, ‘__repr__‘, ‘__setattr__‘, ‘__sizeof__‘, ‘__str__‘, ‘__subclasshook__‘, ‘__weakref__‘, ‘name‘, ‘say_score‘, ‘score‘]
{‘name‘: ‘jack‘, ‘score‘: ‘100‘}
True
False
二:__init__構造方法和__new__方法
類是抽象的,也稱之為“對象的模板”。我們需要通過類這個模板,創建類的實例對象,然 後才能使用類定義的功能。
過一個 Python 對象包含三個部分:id(identity 識別碼)、type(對象類型)、 value(對象的值)。
現在,我們可以更進一步的說,一個 Python 對象包含如下部分:
1. id(identity 識別碼)
2. type(對象類型)
3. value(對象的值)
(1) 屬性(attribute)
(2) 方法(method)
創建對象,我們需要定義構造函數__init__()方法。構造方法用於執行“實例對象的初始化工 作”,即對象創建後,初始化當前對象的相關屬性,無返回值。
__init__()的要點如下:
1. 名稱固定,必須為:__init__()
2. 第一個參數固定,必須為:self。 self指的就是剛剛創建好的實例對象。
3. 構造函數通常用來初始化實例對象的實例屬性,如下代碼就是初始化實例屬性:name 和score。
def __init__(self,name,score):
self.name = name #實例屬性
self.score = score
4. 通過“類名(參數列表)”來調用構造函數。調用後,將創建好的對象返回給相應的變量。 比如:s1 = Student(‘張三‘, 80)
5. __init__()方法:初始化創建好的對象,初始化指的是:“給實例屬性賦值”
6. __new__()方法: 用於創建對象,但我們一般無需重定義該方法。
7. 如果我們不定義__init__方法,系統會提供一個默認的__init__方法。如果我們定義了帶參 的__init__方法,系統不創建默認的__init__方法。
註:Python中的self 相當於C++中的 self 指針, JAVA和C#中的this 關鍵字。Python 中self必須為構造函數的第一個參數,名字可以任意修改。但一般遵守慣例,都叫做 self。
三:實例屬性和實例方法
(一)實例屬性:
實例屬性是從屬於實例對象的屬性,也稱為“實例變量”。他的使用有如下幾個要點:
1. 實例屬性一般在__init__()方法中通過如下代碼定義:
self.實例屬性名 = 初始值
2. 在本類的其他實例方法中,也是通過self 進行訪問:
self.實例屬性名
3. 創建實例對象後,通過實例對象訪問:
obj01 = 類名() #創建對象,調用__init__()初始化屬性
obj01.實例屬性名 = 值 #可以給已有屬性賦值,也可以新加屬性
(二)實例方法:
實例方法是從屬於實例對象的方法。實例方法的定義格式如下:
def 方法名(self [, 形參列表]):
函數體
方法的調用格式如下:
對象.方法名([實參列表])
要點:
1. 定義實例方法時,第一個參數必須為self。和前面一樣,self 指當前的實例對象。
2. 調用實例方法時,不需要也不能給self 傳參。self 由解釋器自動傳參。
函數和方法的區別:
1. 都是用來完成一個功能的語句塊,本質一樣。
2. 方法調用時,通過對象來調用。方法從屬於特定實例對象,普通函數沒有這個特點。
3. 直觀上看,方法定義時需要傳遞self,函數不需要。
實例對象的方法調用本質:
其他操作:
1. dir(obj)可以獲得對象的所有屬性、方法
2. obj.__dict__ 對象的屬性字典
3. pass 空語句
4. isinstance(對象,類型) 判斷“對象”是不是“指定類型”
(一)Python入門-6面向對象編程:02類的定義-類和對象的關系-構造函數-實例屬性-實例方法