【面向对象编程】(1) 类实例化的基本方法
各位同學好,本章節和大家分享一下面向對象編程的一些方法,通過一些案例帶大家由淺入深掌握面向對象的編程。
1. 最基本的類實例化
創建類的方法是 class 變量名:?,實例化方法是 類名() ,分配屬性的方法是 實例名.屬性名 = 值 ?
#(1)創建類
class Item: # 創建類的方法是 class 類名:pass # 不執行任何內容#(2)實例化
item1 = Item() # 創建Item類的實例化對象item1#(3)給實例化對象分配屬性
item1.name = 'phone'
item1.price = 100
item1.quantity = 5#(4)打印結果
print(type(item1)) # <class '__main__.Item'>
print(type(item1.name)) # <class 'str'>
print(type(item1.price)) # <class 'int'>
print(type(item1.quantity)) # <class 'int'>
2. 在類中創建方法
在類的內部定義的函數,我們稱之為方法,它可以運用于所有的類實例化對象上。我們在類的內部定義的函數,它的第一個參數默認是 self,代表類實例化對象,下面代碼中是指item1。在類的外部調用類的內部定義的方法:對象名.方法名(參數)?
#(1)定義類
class Item: # 創建類的方法是 class 類名:#(2)在類中創建方法# 當調用這個方法時,將對象本身作為第一個參數self傳遞def calculate_total_price(self, x, y): return x * y # 返回乘積#(3)實例化
item1 = Item() # 創建Item類的實例化對象item1#(4)給實例化對象分配屬性
item1.name = 'phone'
item1.price = 100
item1.quantity = 5#(5)調用方法,self代表item1,傳入兩個參數x代表價格,y代表數量,
res = item1.calculate_total_price(item1.price, item1.quantity)
print(res) # 500# 再實例化一個
item2 = Item() # 創建Item類的實例化對象item1
item2.name = 'MacBook'
item2.price = 1000
item2.quantity = 3
print(item2.calculate_total_price(item2.price, item2.quantity))
# 輸出 3000
3. 類的初始化
3.1 初始化無默認值
在類實例化之后,需要分別給每個對象分配屬性,如上一節的第(4)步。如果對象很多的話,極大增加了工作量。因此我們希望在類實例化對象的時候就能自動給對象分配屬性。初始化方法:在類中定義 def __init__(self, 參數): ,在類實例化時,會自動執行初始化函數中的所有內容,自動完成屬性分配。
#(1)定義類
class Item: # 創建一個類#(2)初始化,實例化這個類時,會自動執行init內容def __init__(self, name, price, quantity):# 動態屬性分配self.name = name # 給實例化屬性賦值,相當于item1.name = 'phone'self.price = price # 相當于item1.price = 100self.quantity = quantity # 相當于item2.quantity = 3#(3)實例化,創建Item類的實例化對象item1
# 自動執行初始化中的內容,不需要一個一個去定義
item1 = Item('Phone', 100, 5)
item2 = Item('MacBook', 1000, 3)# 打印結果
print('name1:', item1.name, 'price1:', item1.price, 'quantity1:', item1.quantity)
print('name2:', item2.name, 'price2:', item2.price, 'quantity2:', item2.quantity)
# name1: Phone price1: 100 quantity1: 5
# name2: MacBook price2: 1000 quantity2: 3
3.2 初始化有默認值
在初始化的過程中,可以給屬性設置默認值。那樣的話,在實例化時,如果不給定某個屬性的值,那么這個屬性就被賦予默認值。如下面在初始化時,已經給定了price和quantity這兩個屬性的默認值,因此item1就直接使用這兩個屬性的默認值,item2改變這兩個屬性的默認值。
#(1)創建類
class Item: # 創建一個類#(2)初始化,實例化這個類時,會自動執行init內容# price和quantity存在默認值,可以不用傳值def __init__(self, name, price=50, quantity=10): # 動態屬性分配self.name = name # 給實例化屬性賦值,相當于item1.name = 'phone'self.price = price # 相當于item1.price = 100self.quantity = quantity # 相當于item2.quantity = 3#(3)實例化,創建Item類的實例化對象item1
# 自動執行初始化中的內容,不需要一個一個去定義
item1 = Item('Phone') # 使用默認值的price和quantity
item2 = Item('MacBook', 1000, 3) # 不使用默認值,自己賦值# 打印結果
print('name1:', item1.name, 'price1:', item1.price, 'quantity1:', item1.quantity)
print('name2:', item2.name, 'price2:', item2.price, 'quantity2:', item2.quantity)
# name1: Phone price1: 50 quantity1: 10
# name2: MacBook price2: 1000 quantity2: 3
4. 初始化后調用類中定義的方法
接著類初始化之后,在類中定義方法,第一個參數默認是實例化對象 self,這時候不需要傳入額外參數。因為經初始化之后的對象,就已經被賦予了屬性及屬性值,可直接通過 self.屬性名 讀取該屬性值。
#(1)定義類
class Item: #(2)初始化,如果實例化時不給定實例化屬性的值,那就使用默認值def __init__(self, name, price=100, quantity=10):# 給實例化對象分配屬性self.name = nameself.price = priceself.quantity = quantity#(3)在類中定義方法,self代表實例化對象def calculate_total_price(self):# 實例化對象在初始化過程中已經附有了屬性,可直接在定義的方法中計算return self.price * self.quantity#(4)創建Item類的實例化對象item1
item1 = Item('Phone', 100, 5) # 自定義各個屬性的值#(5)調用類中定義的方法,將item1作為對象self傳入該方法
res = item1.calculate_total_price()
print(res) # 500# ==2== 補充
# 這里在實例化對象過程中沒有指定數據類型,如果我們傳入的price屬性的值是字符串會發生什么呢
item1 = Item('Phone', '100', 5) # 傳入各個屬性的值
res = item1.calculate_total_price() # 調用類方法計算price和quantity的乘積
# 相當于'100'*5,即把字符串100打印5次
print(res) # 100100100100100
可是,如果在類實例化的時候,傳入的屬性值的類型不符合要求,就得不到想要的結果。比如傳入的price是字符串類型的'100',而quantity是整型的5,這兩個不同的數據類型相乘,'100'*5表示將字符串'100'打印5次,得到的不是我們預期的結果。下面講一下如何處理這種情況。
5. 初始化時,指定傳入的數據類型
在初始化函數中指定數據類型,屬性名: 數據類型,在類實例化的時候會提醒需要的什么樣的數據類型。如下,name屬性指定數據類型為str字符串類型,price屬性為浮點類型,quantity屬性已經賦予默認值,那么它的數據類型和默認值的數據類型相同。
#(1)創建類
class Item: #(2)初始化,self代表實例化對象# 指定name屬性的值為字符串類型,price屬性的值為浮點類型,# quantity屬性已經附有默認值,不需要再指定類型,因為quantity的數據類型就是默認值的數據類型def __init__(self, name: str, price: float, quantity=10):# 給實例化對象分配屬性self.name = nameself.price = priceself.quantity = quantity#(3)定義類方法def calculate_total_price(self):# 計算乘積return self.price * self.quantity#(4)創建Item類的實例化對象
item1 = Item('Phone', 100) # 指定name屬性和price屬性,quantity屬性使用默認值#(5)調用類中的方法
res = item1.calculate_total_price()
print(res) # 1000
6. 初始化時,檢查輸入值是否符合預期
這里用到 assert 方法。在上一節中,我們規定了數據類型,但如果數據類型輸入對了,但是值的范圍不滿足要求那要怎么辦呢。方法: assert 條件, 報錯內容
如下面代碼中的 assert price >= 0, f'Price {price} is not greater or equal to 0' 。意思是,如果price接收的屬性值大于等于0,那就正常運行;如果price的值小于0,程序就報錯,報錯內容是逗號后面的內容。
#(1)創建一個類
class Item: #(2)初始化,self代表實例化對象,指定實例化屬性的數據類型def __init__(self, name:str, price:float, quantity=10):#(3)判斷輸入值是否滿足要求,不滿足則報錯,報錯內容是逗號后面的# 比如,要求每個實例的價格屬性price是大于0的,滿足要求則不顯示逗號后面的內容assert price >= 0, f'Price {price} is not greater or equal to 0' assert quantity >= 0, f'Quantity {quantity} is not greater or equal to 0'#(4)給每個實例屬性賦值self.name = nameself.price = priceself.quantity = quantity#(5)定義類方法def calculate_total_price(self):# 計算乘積return self.price * self.quantity#(6)Item類的實例化對象item1
item1 = Item('Phone', -100, 3)#(7)調用類實例化方法
res = item1.calculate_total_price()
print(res)
總結
以上是生活随笔為你收集整理的【面向对象编程】(1) 类实例化的基本方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【机器视觉案例】(8) AI视觉,手势控
- 下一篇: 【机器视觉案例】(9) AI视觉,手势控