歡迎您光臨本站 註冊首頁

如何理解python面向對象編程

←手機掃碼閱讀     madbeef @ 2020-06-05 , reply:0

類是面向對象程序設計的一部分。面向對象程序設計或者簡稱為 OOP 致力於創建可重用代碼塊稱之為類。當你想在你的程序中使用類時,你會從類中創建一個對象,這也是面向對象一詞的由來。Python 並不總是面向對象的,但是你會在你的項目中用到對象。為了理解類,你需要理解面向對象的一些基礎術語。

常用術語

class:類。類是代碼塊的主體,其中定義了建立的模型的屬性和行為。這個模型可以來自於真實世界,也可以是虛擬遊戲等。

attribute:屬性。是一系列信息的集合。在類中,一個屬性通常是一個變量。

behavior:行為。行為是定義在類中,組成方法的部分。也即是定義在類中函數的一部分。

method:方法。類中的函數,由 behavior 組成。

object:對象。對象是類的實例。一個對象中包含所有類中屬性的值。你可以為一個類創建任意數量的對象。

近距離觀察 Rocket 類

我們已經瞭解到一些類的基本術語,讓我們回頭再分析一下上節提到的 Rocket 類。

__init__() 方法

定義一個初始代碼塊,如下所示:

  class Rocket():    # Rocket simulates a rocket ship for a game,    # or a physics simulation.        def __init__(self):      # Each rocket has an (x,y) position.      self.x = 0      self.y = 0

 

第一行展示了類是如何創建的。關鍵字 class 告訴 Python 準備定義一個類。類名的命名規則和變量的相同,但是 Python 中有一個約定好的規則,類名必須是駝峰式的。也即每個單詞的開頭必須是大寫的,不允許下劃線的出現。類名後緊跟一對圓括號,目前為止圓括號裡都是空的,接下來的學習中,其中可能會包含一個類。這個類是新類基於的類。

前後都有兩個下劃線的函數是內置在 Python 中的有特殊用途的函數。__init__() 函數就是一個特殊的函數。當創建一個類的對象時,它會自動執行。我們可以稱之為初始化函數,在對象使用之前初始化一些必要的屬性。在這個例子中,__init__() 函數初始化了 x 和 y 屬性。

關鍵字 self 可能會有些難以理解。單詞 "self" 指向當前的對象。當你創建一個類時,它可以訪問到類中的任意指定屬性。基本上,類中所有的函數都需要 self 對象作為第一個參數,因此它們就可以訪問類中的屬性。

現在,讓我們看看類中的方法吧!

一個簡單的方法

下述代碼在 Rocket 類中定義了一個方法。

  class Rocket():    # Rocket simulates a rocket ship for a game,    # or a physics simulation.        def __init__(self):      # Each rocket has an (x,y) position.      self.x = 0      self.y = 0          def move_up(self):      # Increment the y-position of the rocket.      self.y += 1

 

方法就是類中的函數。因此你可以在方法中做任何函數能做的事。

默認情況下,每個函數都需要接受一個參數:self 。它是對調用這個方法的對象的引用。self 參數能讓你訪問到調用對象的屬性。在這個例子中,self 用來訪問 Rocket 對象的 y 屬性。這個方法被調用一次,對象的 y 屬性就增加1。為了更近一步瞭解方法的運行過程,仔細閱讀下述代碼,並觀察它們的輸出。

  class Rocket():    # Rocket simulates a rocket ship for a game,    # or a physics simulation.        def __init__(self):      # Each rocket has an (x,y) position.      self.x = 0      self.y = 0          def move_up(self):      # Increment the y-position of the rocket.      self.y += 1    # Create a Rocket object, and have it start to move up.  my_rocket = Rocket()  print("Rocket altitude:", my_rocket.y)    my_rocket.move_up()  print("Rocket altitude:", my_rocket.y)

 

創建多個對象

面向對象編程一個重要目標是創建可重用代碼。一旦你寫好了類,就能創建任意數量的對象。通常,類被放進一個單獨的文件中,在需要的時候導入程序中。因此你可以創建一個類庫,在不同的程序中重複使用這些類。

在一個類上創建多個對象,示例如下:

  class Rocket():       # Rocket simulates a rocket ship for a game,# Rocket     # or a physics simulation.        def __init__(self):      # Each rocket has an (x,y) position.      self.x = 0      self.y = 0          def move_up(self):      # Increment the y-position of the rocket.      self.y += 1        # Create a fleet of 5 rockets, and store them in a list.  my_rockets = []  for x in range(0,5):    new_rocket = Rocket()    my_rockets.append(new_rocket)    # Show that each rocket is a separate object.  for rocket in my_rockets:    print(rocket)

 

內容擴展:

初識類和對象

python中一切皆為對象,類型的本質就是類,所以,不管你信不信,你已經使用了很長時間的類了

  >>> dict #類型dict就是類dict>>> d=dict(name='eva') #實例化  >>> d.pop('name') #向d發一條消息,執行d的方法pop  'eva'

 

從上面的例子來看,字典就是一類數據結構,我一說字典你就知道是那個用{}表示,裡面由k-v鍵值對的東西,它還具有一些增刪改查的方法。但是我一說字典你能知道字典裡具體存了哪些內容麼?不能,所以我們說對於一個類來說,它具有相同的特徵屬性和方法。

而具體的{'name':'eva'}這個字典,它是一個字典,可以使用字典的所有方法,並且裡面有了具體的值,它就是字典的一個對象。對象就是已經實實在在存在的某一個具體的個體。

再舉一個其他的例子,通俗一點,比如你現在有一個動物園,你想描述這個動物園,那麼動物園裡的每一種動物就是一個類,老虎、天鵝、鱷魚、熊。他們都有相同的屬性,比如身高體重出生時間和品種,還有各種動作,比如鱷魚會游泳,天鵝會飛,老虎會跑,熊會吃。

但是這些老虎熊啥的都不是具體的某一隻,而是一類動物。雖然他們都有身高體重,但是你卻沒有辦法確定這個值是多少。如果這個時候給你一隻具體的老虎,而你還沒死,那你就能給他量量身高稱稱體重,這些數值是不是就變成具體的了?那麼具體的這一隻老虎就是一個具體的實例,也是一個對象。不止這一隻,其實每一隻具體的老虎都有自己的身高體重,那麼每一隻老虎都是老虎類的一個對象。


[madbeef ] 如何理解python面向對象編程已經有228次圍觀

http://coctec.com/docs/python/shhow-post-237066.html