面向對象概念 面向對象是利用類和對象來創建各種模型對真實世界進行描述,也能使程式變得簡單。 class 類 一個類即對一類擁有相同屬性的對象的抽象。其中類定義了這些對象都具備非屬性以及方法。 object 對象 一個對象即是一個類的實例化後的實例,一個類必須經過實例化後才能在程式中調用,一個類可以有 ...
面向對象概念
面向對象是利用類和對象來創建各種模型對真實世界進行描述,也能使程式變得簡單。
class 類
一個類即對一類擁有相同屬性的對象的抽象。其中類定義了這些對象都具備非屬性以及方法。
object 對象
一個對象即是一個類的實例化後的實例,一個類必須經過實例化後才能在程式中調用,一個類可以有多個屬性,每個對象也可以有不同的屬性
encapsulation 封裝
在類中對數據的賦值、內部調用對外部用戶是透明的,這使類變成了一個容器,裡面包含著類的屬性以及方法。
防止數據被隨意修改
使外部程式不需要關註對象內部結構,只需要通過對象對外提供的介面進行直接訪問即可
inheritance 繼承
一個類可以派生出子類,在這個類里定義的屬性、方法自動被子類繼承
通過父類->子類的方式以最小編碼實現不同角色的不同點與共同點
polymorphism 多態
一個基類中派生出不同的子類,且每個子類在繼承同樣方法名的同時對父類的方法做了不同的實現,就是同一種事物表現出的多種狀態。
定義類和對象
類的定義
1 class person(object): 2 #person類名,object是固定格式 3 def __init__(self,name): 4 #類的構造函數,對象的參數都由此處傳入。self表示是對象自身 5 self.name = name 6 7 def hello(self): 8 #由於self等於對象自身,而構造函數已經將所有參數傳給self了。所以類的方法可以直接調用類的屬性。不會出現構造函數的局部不按量不能被其它方法訪問 9 print("hello world,i'm %s"%self.name) 10 11 obj1 = person('zsq') #類的實例,即對象 12 obj1.hello() #對象調用方法
類的私有屬性
對象的屬性保存在對象內,對象的方法保存在類裡面。類似於下麵介紹的類的公有屬性
1 __author__ = 'zhang' 2 3 class person(object): 4 def __init__(self,name):
self.name = name 5 self.__heart = 'normal' #私有屬性,對象不可調用。 類的方法可以進行調用,進行操作即外部不能調用,內部可以調用 6 def hello(self): 7 print("hello world,i'm %s"%self.name) 8 9 def get_heart(self): #訪問私有屬性的方法,讓外部能訪問但不能修改 10 return self.__heart 11 12 obj1 = person('zsq') 13 obj1.hello() 14 print(obj1.get_heart())#通過類的方法訪問私有屬性 15 print(obj1._person__heart) #強制訪問私有屬性
類的公有屬性
對象的公有屬性預設是引用類裡面的,當通過對象操作公有屬性其實是在對象本地新建一個與公有屬性同名的變數而已,與原來的公有屬性沒有任何關係。只不過訪問時候先在本地尋找對應的變數名,找不到再去類中尋找而已。 刪除對象自己的公有屬性其公有屬性會恢復到類裡面公有屬性的值。
1 class person(object): 2 nationality = "CHINA" 3 def __init__(self,name): 4 self.name = name 5 6 obj1 = person('zsq') 7 obj2 = person('zsq1') 8 print(obj1.nationality) 9 print(obj2.nationality) 10 print('-------------') 11 person.nationality = "CN" 12 print(obj1.nationality) 13 print(obj2.nationality) 14 obj1.nationality = "USA" 15 print('-------------') 16 print(obj1.nationality) 17 print(obj2.nationality) 18 print('-------------') 19 del obj1.nationality 20 print(obj1.nationality) 21 print(obj2.nationality)
將類方法修改為私有方法
1 class person(object): 2 nationality = "CHINA" 3 def __init__(self,name): 4 self.name = name 5 def get_name(self): 6 print("get name is %s"%self.name) 7 8 obj1 = person('zsq') 9 obj2 = person('zsq1') 10 11 def get_name2(self): 12 print("this is private fun get name %s"%self.name) 13 obj2.get_name = get_name2 14 obj1.get_name() 15 obj2.get_name(obj2)