python對象編程總結(一)

對於一個python的class而言,擁有類屬性,類對象,實例對象,實例屬性等概念。

class A:
    name="A"  #類屬性,爲類所共有,有點類似c++中的靜態數據成員
    def printName(self):  #定義了一個方法
        print(self.name)


類支持兩種做法:1.引用,即直接使用類對象和類屬性。2.實例化,即產生一個對象的實例。比如:
A類定義完成之後就產生了一個全局的類對象,可以通過類對象來訪問類中的屬性和方法了。當通過A.name(至於爲什麼可以直接這樣訪問屬性後面再解釋,這裏只要理解類對象這個概念就行了)來訪問時,A.name中的A稱爲類對象,這點和C++中的有所不同。當然還可以進行實例化操作,a=A( ),這樣就產生了一個A的實例對象,此時也可以通過實例對象a來訪問屬性或者方法了(a.name).
在數據成員前面加__意味着這是私有的。
同時,python中擁有一些內置的方法,比如:構造方法init(self,….)在生成對象時調用,可以用來進行一些初始化操作,不需要顯示去調用,系統會默認去執行。構造方法支持重載,如果用戶自己沒有重新定義構造方法,系統就自動執行默認的構造方法。
  析構方法del(self)在釋放對象時調用,支持重載,可以在裏面進行一些釋放資源的操作,不需要顯示調用。
  還有其他的一些內置方法:
  比如 cmp( ), len( )等,具體的用法可以參考這篇博文:
  http://blog.csdn.net/foreveyking/article/details/78077061
對於類屬性和實例屬性,如果在類方法中引用某個屬性,該屬性必定是類屬性,而如果在實例方法中引用某個屬性(不作更改),並且存在同名的類屬性,此時若實例對象有該名稱的實例屬性,則實例屬性會屏蔽類屬性,即引用的是實例屬性,若實例對象沒有該名稱的實例屬性,則引用的是類屬性;如果在實例方法更改某個屬性,並且存在同名的類屬性,此時若實例對象有該名稱的實例屬性,則修改的是實例屬性,若實例對象沒有該名稱的實例屬性,則會創建一個同名稱的實例屬性。想要修改類屬性,如果在類外,可以通過類對象修改,如果在類裏面,只有在類方法中進行修改。
從類方法和實例方法以及靜態方法的定義形式就可以看出來,類方法的第一個參數是類對象cls,那麼通過cls引用的必定是類對象的屬性和方法;而實例方法的第一個參數是實例對象self,那麼通過self引用的可能是類屬性、也有可能是實例屬性(這個需要具體分析),不過在存在相同名稱的類屬性和實例屬性的情況下,實例屬性優先級更高。靜態方法中不需要額外定義參數,因此在靜態方法中引用類屬性的話,必須通過類對象來引用。

發佈了40 篇原創文章 · 獲贊 19 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章