日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

【面向对象编程】(1) 类实例化的基本方法

發(fā)布時(shí)間:2023/11/27 生活经验 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【面向对象编程】(1) 类实例化的基本方法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

各位同學(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。