標籤:物件導向
類和對象
面向過程和物件導向的編程
面向過程的編程:函數式編程,c程式等
物件導向的編程:c++,JAVA ,python等
類和對象:是物件導向中的兩個重要概念
類:是對事物的抽象,比如:汽車模型(某一類事物的描述,屬性和方法)
對象:是類的一個執行個體,比如:qq轎車,大客車
範例說明:
汽車模型可以對汽車的特徵和行為進行抽象,然後可以執行個體化為一台真實的汽車體現出來
Python類的定義:
python類的定義:
使用class關鍵字定義一個類,並且類名的首字母要大寫;
當程式員需要建立的類型不能用簡單類型表示時就需要建立類;
類把需要的變數和函數組合在一起, 這種包含稱之為“封裝”;
python類的結構:
>>>class 類名:
... 成員變數
... 成員函數
...
類的建立:範例
#!/usr/bin/python#coding:utf8class Ren: #class關鍵字,類別首字母大寫 name = "人" #屬性 high = "一人高" #屬性 wight = "一人重" #屬性 def run(self): #成員函數定義方法; print "跑步"
#注意類當中定義成員函數時和外邊定義函數時有區別,裡邊必須有一個形參,用來傳遞類當中的屬性和方法,但調用的時候是不需要傳參的
對象的建立:
建立對象的過程稱之為執行個體化,當一個對象被建立後,包含三個方面的特性:對象的控制代碼、屬性和方法。
控制代碼用於區分不同的對象;
對象的屬性和方法與類中的成員變數和成員函數對應
#!/usr/bin/python#coding:utf8class Ren: name = ‘人‘ high = ‘一人高‘ wight = ‘一人重‘ def run(self): #self 表示自己的類別 print ‘跑步‘zhangsan = Ren() #從Ren 的類別中執行個體化一個對象 print zhangsan
[[email protected] class]# python class.py<__main__.Ren instance at 0x7ff7f80110e0> #instance 執行個體#列別中的執行個體(對象)#對象zhangsan具有屬性和方法,zhangsan的屬性就是類別中Ren的成員變數,方法就是類別中的函數
#屬性的訪問 (通過對象.)
.....print zhangsan.high[[email protected] class]# python class.py 一人高
#對象屬性的重新賦值
.......zhangsan.name = "張三"print zhangsan.name[[email protected] class]# python class.py 張三
#注意:對象是從類別中執行個體化出來的,它具有類別的屬性和方法,同時對象也是一個個體.
zhangsan.money = "10000"print zhangsan.money[[email protected] class]# python class.py 10000
Python對象的體繫結構:
-經典對象:內部由屬性和方法組成,屬性可以是資料類型也可以是函數類型。
如果屬性為函數則該屬性就是一個方法。
-新型對象-定義新型對象,必須繼承object方法class_name(object)
新型對象提供了對類方法和靜態方法的支援
.... class Ren(object):
類的屬性:
類有屬性和方法組成,類的屬性是對資料的封裝,類的方法則是對類的行為的封裝。類的屬性按使用範圍分為私人屬性和公有屬性,類的屬性範圍取決於屬性的名稱
公有屬性:所謂共有屬性就是在類中和類外調用的屬性
#!/usr/bin/python#coding:utf8class Ren(object): name = ‘人‘ high = ‘一人高‘ wight = ‘一人重‘ def run(self): print self.name #調用內部屬性,self代表本身,訪問自己,調用類的屬性 print ‘跑步‘ if __name__ == ‘__main__‘: zhangsan = Ren() zhangsan.name = "張三" print zhangsan.name #外部存取 zhangsan.run() print Ren.name #通過類名訪問屬性
私有屬性:不能被類以外的函數調用
#!/usr/bin/python#coding:utf8class Ren(object): name = ‘人‘ high = ‘一人高‘ wight = ‘一人重‘ __money = ‘1000‘ def run(self): print self.name print ‘跑步‘ if __name__ == ‘__main__‘: zhangsan = Ren() zhangsan.name = "張三" print zhangsan.__money[[email protected] class]# python class.py Traceback (most recent call last): File "class.py", line 15, in <module> print zhangsan.__moneyAttributeError: ‘Ren‘ object has no attribute ‘__money‘ #無法調用
#!/usr/bin/python#coding:utf8class Ren(object): name = ‘人‘ high = ‘一人高‘ wight = ‘一人重‘ __money = ‘1000‘ def run(self): print self.name print ‘跑步‘ def say(self): #內部方法中調用 print self.__moneyif __name__ == ‘__main__‘: zhangsan = Ren() zhangsan.name = "張三" print zhangsan.say() #通過內部調用方法顯示,實現對資料的封裝、隱藏
(可以通過instance._classname_attribute方式訪問,但只用於調式程式)
print zhangsan._Ren__money
定義方式:以“__”雙底線開始的成員變數就是私人屬性,否則就是公有屬性
內建屬性:有系統在定義類的時候預設添加的,由前後兩個底線構成__dict__,__module__
...... print Ren.__dict__ [[email protected] class]# python class.py 人##################################################{‘high‘: ‘\xe4\xb8\x80\xe4\xba\xba\xe9\xab\x98‘, ‘__module__‘: ‘__main__‘, ‘run‘: <function run at 0x7f9ebdb60230>, ‘name‘: ‘\xe4\xba\xba‘, ‘__dict__‘: <attribute ‘__dict__‘ of ‘Ren‘ objects>, ‘__weakref__‘: <attribute ‘__weakref__‘ of ‘Ren‘ objects>, ‘__doc__‘: None, ‘wight‘: ‘\xe4\xb8\x80\xe4\xba\xba\xe9\x87\x8d‘, ‘say‘: <function say at 0x7f9ebdb608c0>, ‘_Ren__money‘: ‘1000‘}
本文出自 “思想大於技術” 部落格,謝絕轉載!
python 物件導向