一. 面向?qū)ο缶幊?Object-Oriented Programing
- 什么是對象:對象是指現(xiàn)實中的物體或?qū)嵨铮?
- 什么是面向?qū)ο螅喊岩磺锌闯蓪ο?實例),用各種對象之間的關(guān)系來描述實物
- 對象都有什么特征:
- 對象有很多屬性(名詞):可以通過實例訪問的變量稱為屬性,如:姓名,性別,年齡,...
- 對象有很多行為(動作):學(xué)習(xí),吃飯,睡覺...
- 面向?qū)ο蟮淖畲髢?yōu)勢:每個對象可以管理自己的資源
二. 什么是類
? ? ? ?擁有相同屬性,行為的對象分為一組,即為一個類。類是用來描述對象的工具,用類可以創(chuàng)建此類的對象(實例)。int float complex dict bytes set str tuple list ValueError ... python中已經(jīng)為我們寫好了很多類,但并不能滿足所有需求,有時需要我們自己創(chuàng)建類,類的創(chuàng)建使用class語句,如下:
-
語法:
?? ??? ?class 類名(繼承列表):
?? ??? ??? ?'''類文檔字符串'''
?? ??? ??? ?實例方法定義
?? ??? ??? ?類變量定義
?? ??? ??? ?類方法定義(@classmethod)
?? ??? ??? ?靜態(tài)方法定義(@staticmethod) - 作用:
- 創(chuàng)建一個類;
- 用于描述對象的行為和屬性;
- 用于創(chuàng)建此類的一個或多個同類對象(實例)
- 說明:
- 繼承列表可以省略,省略繼承列表表示此類繼承自object;
- 類名必須為標(biāo)識符;
- 類名實質(zhì)是個變量,綁定一個類
三.?實例方法和實例屬性
- 語法:
?? ??? ?class 類名(繼承列表):
?? ??? ??? ?def 實例方法(self, 形參1, 形參2, ...):
?? ??? ??? ??? ?'''方法的文檔字符串'''
?? ??? ??? ??? ??? ?語句塊
- 作用:用于描述一個對象的行為,讓此類型的全部對象都擁有相同的行為;
- 說明:
- 實例方法的實質(zhì)是函數(shù),是定義在類內(nèi)的函數(shù);
- 實例方法至少有一個形參,第一個形參代表調(diào)用這個方法的實例,一般命名為'self';
- 實例方法的調(diào)用語法:
- 實例.實例方法名(調(diào)用傳參)
- 類名.實例方法名(實例,調(diào)用傳參)
- 實例屬性也叫實例變量:每個實例可以使用自己的變量,稱為實例變量(也叫屬性)
- 使用語法:實例.屬性名;
- 屬性的賦值規(guī)則:首次為屬性賦值則創(chuàng)建屬性,再次為屬性賦值則改變屬性的綁定關(guān)系;
- 作用:記錄每個對象自身的數(shù)據(jù);
- 刪除屬性:del 對象.屬性名
- del 語句總結(jié):
- 刪除變量 del a;
- 刪除列表中的元素 del L[0];
- 刪除字典中的鍵 del d['name'];
- 刪除對象的屬性 del dog1.color
四. 構(gòu)造函數(shù)
- 構(gòu)造函數(shù)調(diào)用表達式:(函數(shù)名是個類名)
?? ??? ?類名([創(chuàng)建傳參列表])
- 作用:創(chuàng)建這個類的實例對象,并返回此實例對象的引用關(guān)系;
- 說明:
- 實例有自己的作用域和名字空間,可以為該實例添加實例變量(也叫屬性);
- 實例可以調(diào)用類方法和實例方法;
- 實例可以訪問類變量和實例變量
五. 初始化方法
- 作用:對新創(chuàng)建的對象添加屬性等初始化操作;
- 語法格式:
?? ??? ?class 類名(繼承列表)
?? ??? ??? ?def __init__(self[,形參列表])
?? ??? ??? ??? ?語句塊
?? ??? ?注:[]里的內(nèi)容代表可省略
- 說明:
- 初始化方法名必須為__init__不可改變;
- 初始化方法會在構(gòu)造函數(shù)創(chuàng)建實例后自動調(diào)用;
- 構(gòu)造函數(shù)的實例將通過__init__方法的參數(shù)列表傳入到__init__方法中;
- 初始化方法內(nèi)如果需要return語句返回,則只能返回None。
六. 析構(gòu)方法
- 語法:
?? ??? ?class 類名(繼承列表):
?? ??? ??? ?def __del__(self):
?? ??? ??? ??? ?語句塊
- 作用:通常用來釋放此對象占用的資源;
- 說明:析構(gòu)方法會在對象被銷毀時自動調(diào)用;python語句建議不要在對象銷毀時做任何事情,因為對象銷毀的時間難以確定。
- code
"""析構(gòu)方法的用法"""
class Car:
"""docstring for Car"""
def __init__(self, name):
self.name = name
print('汽車', name, '對象被創(chuàng)建')
def __del__(self):
print('汽車', self.name, '對象被銷毀')
c1 = Car('BYD E6')
l1 = list()
l1.append(c1)
# 引用計數(shù)法:雖然c1變量綁定了None對象,但列表中仍有變量綁定Car('BYD E6')對象,故Car('BYD E6')不被銷毀
c1 = None
# 阻止程序退出,因為在程序退出時,對象將被自動銷毀
while True:
pass
七. 預(yù)置的實例屬性
- __dict__屬性:綁定一個存儲此實例自身變量的字典
- __class__屬性:綁定創(chuàng)建此實例的類(類實例),可以借助此屬性來訪問創(chuàng)建此實例的類
八. 用于類的函數(shù)
- isinstance(obj, class_or_tuple)? ? 返回這個對象obj是否是某個類的對象,或者某些類中的一個類的對象,如果是則返回True,否則返回False;
- type(obj)? ? 返回對象的類
- 示例:
利用Python實現(xiàn)的學(xué)生類:
"""此類用來描述學(xué)生信息.要求如下:
1.為該類添加初始化方法,實現(xiàn)在創(chuàng)建對象時自動設(shè)置'姓名' '年齡' '成績'屬性;
2.添加set_score方法,能為對象修改成績信息,并限制成績在0-100之間;
3.添加show_info方法打印學(xué)生對象的信息
"""
class Student:
def __init__(self, name, age, score):
"""每當(dāng)根據(jù)student類創(chuàng)建實例時,都將自動運行此方法"""
self.name = name
self.age = age
self.score = score
def set_score(self, score):
"""self實參將自動被傳遞,它是一個指向?qū)嵗旧淼囊?讓實例能夠訪問類中的屬性和方法"""
try:
assert 0 <= score <= 100, '成績有誤,無法修改!'
self.score = score
except AssertionError as err:
print(score, err)
def show_info(self):
print('%s今年%d歲,成績是:%d' % (self.name, self.age, self.score))
def get_score(self):
return self.score
if __name__ == "__main__":
# 傳遞的參數(shù)由__init__方法的形參決定
s1 = Student('Limuxia', 22, 99)
s1.show_info()
s1.set_score(100)
s1.show_info()
s1.set_score(200)
s1.show_info()
# 面向?qū)ο笞兂芍胁唤ㄗh在調(diào)用程序中直接修改和獲取實例的屬性,而是通過方法來返回對象的屬性
print('s1綁定的對象成績是:', s1.get_score())
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
