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

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