面向對象編程 Ojbect-Oriented Programming
兩種編程思想:
面向過程編程
最小單位是: 函數 function
面向對象的編程:
最小單位是: 類 class
什麼是對象:
對象是指現實中的物體或實體
什麼是面向對象
把一切看成對象(實例) 用各種對象之間的關係來描述事物
對象都有什麼特徵:
對象有很多的屬性(名詞,形容詞)
姓名, 年齡, 性別, 頭髮顏色
對象有很多行爲(動作,動詞)
學習,吃飯,睡覺,踢球,工作
什麼是類
擁有相同屬性和行爲的對象分爲一組,即爲一個類
類是用來描述對象的工具,用類可以創建此類的對象(實例)
示意:
車(類) ----> BYD E6(京A.88888) 實例
\
\--> BMW X5(京B.00000) 對象(實例)
狗(類) ----> 小京巴(戶籍號: 000001) 對象
\
\---> 導盲犬(戶籍號:00002) 對象
int(類) -----> 100 對象
\
\---> 200 對象
類的創建語句:
語法:
class 類名(繼承列表):
'''類的文檔字符串'''
實例方法(類內的函數method)定義
類變量
類方法(@classmethod)
靜態方法(@staticmethod)
作用:
創建一個類
類用於描述對象的行爲和屬性
類用於創建此類的一個或多個對象(實例)
說明:
類名必須是標識符
類名實質是變量,它綁定一個類
構造函數
格式:
類名([傳參列表])
作用:
創建這個類的實例對象,並返回此實例對象的引用關係
說明:
對象(實例)可以調用類方法和實例方法
對象(實例) 有自己的作用域和名字空間,可以爲該實例添加
實例變量(也叫實例屬性)
實例方法(instance method)
定義格式:
class 類名(繼承列表):
def 實例方法名(self, 參數1, 參數2, ...):
'''方法的文檔字符串'''
語句塊
作用:
用於描述一個對象的行爲,讓此類型的全部對象都擁有相同
的行爲
說明:
實例方法的實質是函數,是定義在內類的函數
實例方法至少有一個形參,第一個形參綁定調用此方法的實
例,一般命名爲'self'
實例方法的調用語法:
實例.實例方法名(調用傳參)
或
類名.實例方法名(實例, 調用傳參)
實例屬性 attribute (也叫實例變量)
每個實例可以用自己的變量來記錄每個對象自己的數據,這個
變量稱爲實例變量
使用語法:
實例.屬性名
賦值規則:
首次爲屬性賦值則創建此屬性
再次爲屬性賦值則改變此屬性的綁定關係
作用:
記錄每個對象自身的數據
刪除屬性:
del 語句
del 對象.實例變量名
del 語句總結:
1) 刪除變量 del a,b,c
2) 刪除列表中的元素 del L[0], L[0:3]
3) 刪除字典中的鍵 del d['name']
4) 刪除屬性 del obj.name
初始化方法
作用:
對新創建的對象添加屬性
語法格式:
class 類名(繼承列表):
def __init__(self [,形參列表])
語句塊
注:[]代表其中的內容可省略
說明:
1. 初始化方法的名必須是 '__init__' 不可改變
2. 初始化方法會在構造函數創建實例後自動調用,且將實
例自身通過第一個參數self傳入'__init__' 方法
3. 構造函數的實參將通過__init__方法的參數列表傳
入到__init__方法中
4. 初始化方法內如果需要return 返回,則必須返回None
析構方法
格式:
class 類名(繼承列表):
def __del__(self):
....
作用:
在此對象銷燬前釋放此對象所佔用的資源
說明:
析構方法在對象被銷燬前被自動調用
python語言建議不要在對象銷燬時做任何事情,因爲銷燬
的時間難以確定
預置實例屬性
__dict__ 屬性
__dict__屬性綁定一個存儲此實例自身變量的字典
示例:
class Dog:
pass
dog1 = Dog()
print(dog1.__dict__) # {}
dog1.color = "白色"
print(dog1.__dict__) # {'color': "白色"}
__class__ 屬性
__class__ 屬性綁定創建此實例的類
作用:
可以藉助於此屬性來訪問創建此實例的類
示例:
class Dog:
pass
dog1 = Dog()
print(dog1.__class__)
dog2 = dog1.__class__() # Dog()
用於實例對象的函數:
isinstance(obj, class_or_tuple) 返回這個對象obj
是否是某個類的對象,或者某些類中一個類的對象.如果
是則返回True,否則返回False
type(obj) 返回對象的類型
示例:
class Dog:
pass
dog1 = Dog()
isinstance(dog1, Dog) # True
isinstance([1,2,3], Dog) # False
isinstance([1, 2, 3], (int, str)) # False
isinstance([1, 2, 3], (int, str, list))#True
type(dog1) is Dog # True