理解面向對象python
基本原則是,計算機程序由多個可以起到子程序做用的單元或對象組合而成app
關鍵性觀念是,數據以及對數據的操做封裝在一塊兒,組成一個相互依存、不可分割的總體,即對象函數
python面向對象特性測試
徹底支持面向對象的基本功能,如封裝、繼承、多態以及基類方法的覆蓋或重寫ui
python中,對象的概念很普遍,一切內容均可以稱爲對象this
建立類時用變量形式表示的對象屬性稱爲數據成員或成員屬性spa
用函數形式表示的對象行爲稱爲成員函數或成員方法code
1、類對象
1.類的定義與使用blog
# 定義類 class Car: def info(self): print("this is a car") # 使用類實例化對象 # 經過「對象.方法」訪問其中的數據成員或成員方法 car = Car() car.info() out: this is a car # 使用 isinstance測試某個對象是否爲某個類的實例 isinstance(car,Car) out: True # 關鍵字 pass,相似於空語句 # 佔位,預留函數空間 class Car: def info(self): print("this is a car") def color(self): pass
2.類成員與實例成員
實例屬性,通常指在構造函數__init__ 中定義的,定義和使用時必須以self作爲前綴
類屬性,在類中全部方法以外定義的數據成員
在主程序中(或類的外部),實例屬性屬於實例(對象),只能經過對象名訪問,
而類屬性屬於類,能夠經過類名或對象名訪問
--------------------------------------------------------------------
在Python中,能夠動態地爲類和成員增長成員,體現了python的動態類型
--------------------------------------------------------------------
class Car: price = 10000 # 定義類屬性 def __init__(self,c): # 構造函數 self.color=c # 定義實例屬性 car1 = Car("red") car2 = Car("blue") print(car1.color,Car.price) Car.price = 11100 # 修改類屬性 Car.name = 'bird' # 增長類屬性 car1.color = "yellow" # 修改實例屬性 print(car2.color, Car.price, Car.name)
函數與方法有區別,方法通常指與特色實例綁定的函數
1 # 動態爲對象增長成員方法 2 class Demo: 3 pass 4 t=Demo() 5 def test(self,v) 6 self.value = v 7 8 t.test = test # 增長成員方法 test 9 t.test(t,20) 10 11 print(t.value) 12 13 out: 14 20
3. 私有成員與共有成員
python並不提供對私有成員嚴格的訪問保護機制,
在定義類的屬性時,若是屬性名以兩個下劃線 __ 開頭,表示私有屬性
私有屬性在類的外部不能直接訪問,須要經過調用對象的公有成員方法來訪問
公有屬性能夠公開使用,既能夠在類的內部訪問,也能夠在外部程序中使用
----------------------------------------------------
使用下劃線做爲變量名和方法名前綴和後綴,表示類的特殊成員
_xxx 保護成員,只有類對象和子類對象才能訪問
__xxx__ 系統定義的特殊成員
__xxx 類中的私有成員
# 特殊成員定義與訪問 class Fruit: def __init__(self): self.__color='red' # 私有成員 self.__type__='rectangle' # 特殊成員 self.price = 1 # 公有成員 apple = Fruit() print(apple.price) # 對象公有數據成員的值 out: 1 apple.price = 2 # 修改對象公開數據成員的值 print(apple.price) out: 2 apple.__type__ = 'Triangle' # 修改特殊成員的值 print(apple.__type__) out: Triangle