面向對象(你就是上帝): 世間萬物,皆可分類 世界萬物,皆為對象 https://www.cnblogs.com/alex3714/articles/5188179.html 面向對象編程 OOP編程是利用“類”和“對象”來創建各種模型來實現對真實世界的描述,使用面向對象編程的原因一方面是因為它可以 ...
面向對象(你就是上帝):
世間萬物,皆可分類
世界萬物,皆為對象
https://www.cnblogs.com/alex3714/articles/5188179.html
面向對象編程
OOP編程是利用“類”和“對象”來創建各種模型來實現對真實世界的描述,使用面向對象編程的原因一方面是因為它可以使程式的維護和擴展變得更簡單,並且可以大大提高程式開發效率 ,另外,基於面向對象的程式可以使它人更加容易理解你的代碼邏輯,從而使團隊開發變得更從容。
面向對象的幾個核心特性如下
Class 類
一個類即是對一類擁有相同屬性的對象的抽象、藍圖、原型。在類中定義了這些對象的都具備的屬性(variables(data))、共同的方法
Object 對象
一個對象即是一個類的實例化後實例,一個類必須經過實例化後方可在程式中調用,一個類可以實例化多個對象,每個對象亦可以有不同的屬性,就像人類是指所有人,每個人是指具體的對象,人與人之前有共性,亦有不同
Encapsulation 封裝
在類中對數據的賦值、內部調用對外部用戶是透明的,這使類變成了一個膠囊或容器,裡面包含著類的數據和方法
Inheritance 繼承
一個類可以派生出子類,在這個父類里定義的屬性、方法自動被子類繼承
Polymorphism 多態
多態是面向對象的重要特性,簡單點說:“一個介面,多種實現”,指一個基類中派生出了不同的子類,且每個子類在繼承了同樣的方法名的同時又對父類的方法做了不同的實現,這就是同一種事物表現出的多種形態。
編程其實就是一個將具體世界進行抽象化的過程,多態就是抽象化的一種體現,把一系列具體事物的共同點抽象出來, 再通過這個抽象的事物, 與不同的具體事物進行對話。
對不同類的對象發出相同的消息將會有不同的行為。比如,你的老闆讓所有員工在九點鐘開始工作, 他只要在九點鐘的時候說:“開始工作”即可,而不需要對銷售人員說:“開始銷售工作”,對技術人員說:“開始技術工作”, 因為“員工”是一個抽象的事物, 只要是員工就可以開始工作,他知道這一點就行了。至於每個員工,當然會各司其職,做各自的工作。
多態允許將子類的對象當作父類的對象使用,某父類型的引用指向其子類型的對象,調用的方法是該子類型的方法。這裡引用和調用方法的代碼編譯前就已經決定了,而引用所指向的對象可以在運行期間動態綁定
本質(自己理解):
class Role: n=14222#類變數
name=’我是類變數‘
def __init__(self,name,role,weapon,money): #構造函數,在實例化時做一些類的初始化工作 self.name=name#實例變數,作用域是實例本身 self.role=role self.weapon=weapon self.money=money def gun(self): print('%s has gun someone!'%self.name) def be_gun(self): print('%s has been gun '%self.name) def buy_gun(self): print('%s has brought %s'%(self.name,self.weapon)) def show_status(self): print(self.name,self.role, self.weapon, self.money) r1=Role('cjl','ploice','ak47','15000') '''本質:1.對象實例化過程中,實際上是對面名(變數) 傳入到了Role.__init__()中————>r1=Role('cjl','ploice','ak47','15000')(開闢了新空間) ---->self.name=r1.name/self.role=r1.role等等 2.當調用類方法時,實質r1.gun()=Role.gun(r1) (self的作用就可以看出來了) ''' r2=Role('cjl','tufei','m14','15000')
print(r1.n,r1.name)#先找實例變數,若無在去類變數中找(name的例子)
r2.weapon_prove= True#可以向實例中添加屬性 print(r2.weapon_prove) r2.n='修改類變數?'#本質:添加了一個新的屬性 print(r2.n)#查找變數的順序,先實例變數-->在到類變數 print(r1.n)
r2.weapon_prove= True#可以向實例中添加屬性
print(r2.weapon_prove)
r2.n='修改類變數?'#本質:添加了一個新的屬性
print(r2.n)#查找變數的順序,先實例變數-->在到類變數
print(r1.n)