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