python大法好——物件導向

來源:互聯網
上載者:User

標籤:類的方法   回收   dash   屬性   mod   成員   參數   衍生類別   編程   

python大法好——物件導向

Python從設計之初就已經是一門物件導向的語言,正因為如此,在Python中建立一個類和對象是很容易的。本章節我們將詳細介紹Python的物件導向編程。

如果你以前沒有接觸過物件導向的程式設計語言,那你可能需要先瞭解一些物件導向語言的一些基本特徵,在頭腦裡頭形成一個基本的物件導向的概念,這樣有助於你更容易的學習Python的物件導向編程。

接下來我們先來簡單的瞭解下物件導向的一些基本特徵。

物件導向技術簡介
  • 類(Class): 用來描述具有相同的屬性和方法的對象的集合。它定義了該集合中每個對象所共有的屬性和方法。對象是類的執行個體。
  • 類變數:類變數在整個執行個體化的對象中是公用的。類變數定義在類中且在函數體之外。類變數通常不作為執行個體變數使用。
  • 資料成員:類變數或者執行個體變數, 用於處理類及其執行個體對象的相關的資料。
  • 方法重寫:如果從父類繼承的方法不能滿足子類的需求,可以對其進行改寫,這個過程叫方法的覆蓋(override),也稱為方法的重寫。
  • 執行個體變數:定義在方法中的變數,只作用於當前執行個體的類。
  • 繼承:即一個衍生類別(derived class)繼承基類(base class)的欄位和方法。繼承也允許把一個衍生類別的對象作為一個基類對象對待。例如,有這樣一個設計:一個Dog類型的對象派生自Animal類,這是類比"是一個(is-a)"關係(例圖,Dog是一個Animal)。
  • 執行個體化:建立一個類的執行個體,類的具體對象。
  • 方法:類中定義的函數。
  • 對象:通過類定義的資料結構執行個體。對象包括兩個資料成員(類變數和執行個體變數)和方法。
建立類

使用 class 語句來建立一個新類,class 之後為類的名稱並以冒號結尾:

class ClassName:   ‘類的協助資訊‘   #類文檔字串   class_suite  #類體

類的協助資訊可以通過ClassName.__doc__查看。

class_suite 由類成員,方法,資料屬性群組成。

執行個體

以下是一個簡單的 Python 類的例子:

class Employee:   ‘所有員工的基類‘   empCount = 0    def __init__(self, name, salary):      self.name = name      self.salary = salary      Employee.empCount += 1      def displayCount(self):     print "Total Employee %d" % Employee.empCount    def displayEmployee(self):      print "Name : ", self.name,  ", Salary: ", self.salary
  • empCount 變數是一個類變數,它的值將在這個類的所有執行個體之間共用。你可以在內部類或外部類使用 Employee.empCount 訪問。

  • 第一種方法__init__()方法是一種特殊的方法,被稱為類的建構函式或初始化方法,當建立了這個類的執行個體時就會調用該方法

  • self 代表類的執行個體,self 在定義類的方法時是必須有的,雖然在調用時不必傳入相應的參數。

self代表類的執行個體,而非類

類的方法與普通的函數只有一個特別的區別——它們必須有一個額外的第一個參數名稱, 按照慣例它的名稱是 self。

class Test:    def prt(self):        print(self)        print(self.__class__) t = Test()t.prt()
建立執行個體對象

執行個體化類其他程式設計語言中一般用關鍵字 new,但是在 Python 中並沒有這個關鍵字,類的執行個體化類似函數調用方式。

以下使用類的名稱 Employee 來執行個體化,並通過 __init__ 方法接收參數。

"建立 Employee 類的第一個對象"emp1 = Employee("Zara", 2000)"建立 Employee 類的第二個對象"emp2 = Employee("Manni", 5000)
訪問屬性

您可以使用點號 . 來訪問對象的屬性。使用如下類的名稱訪問類變數:

emp1.displayEmployee()emp2.displayEmployee()print "Total Employee %d" % Employee.empCount
Python內建類屬性
  • __dict__ : 類的屬性(包含一個字典,由類的資料屬性群組成)
  • __doc__ :類的文檔字串
  • __name__: 類名
  • __module__: 類定義所在的模組(類的全名是‘__main__.className‘,如果類位於一個匯入模組mymod中,那麼className.__module__ 等於 mymod)

__bases__ : 類的所有父類構成元素(包含了一個由所有父類組成的元組)

python對象銷毀(記憶體回收)

Python 使用了引用計數這一簡單技術來跟蹤和回收垃圾。

在 Python 內部記錄著所有使用中的對象各有多少引用。

 

一個內部跟蹤變數,稱為一個引用計數器。

當對象被建立時, 就建立了一個引用計數, 當這個對象不再需要時, 也就是說, 這個對象的引用計數變為0 時, 它被記憶體回收。但是回收不是"立即"的, 由解譯器在適當的時機,將垃圾對象佔用的記憶體空間回收。

記憶體回收機制不僅針對引用計數為0的對象,同樣也可以處理循環參考的情況。循環參考指的是,兩個對象相互引用,但是沒有其他變數引用他們。這種情況下,僅使用引用計數是不夠的。Python 的垃圾收集器實際上是一個引用計數器和一個迴圈垃圾收集器。作為引用計數的補充, 垃圾收集器也會留心被分配的總量很大(及未通過引用計數銷毀的那些)的對象。 在這種情況下, 解譯器會暫停下來, 試圖清理所有未引用的迴圈。

class Point:   def __init__( self, x=0, y=0):      self.x = x      self.y = y   def __del__(self):      class_name = self.__class__.__name__      print class_name, "銷毀" pt1 = Point()pt2 = pt1pt3 = pt1print id(pt1), id(pt2), id(pt3) # 列印對象的iddel pt1del pt2del pt3

 

 

 

 

未完待續

python大法好——物件導向

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.