類介紹

類,用作定義特定物件的基本特徵的模板。這是一個例子:

class Person(object):
     """A simple class."""                            # docstring
     species = "Homo Sapiens"                         # class attribute

     def __init__(self, name):                        # special method
         """This is the initializer. It's a special
         method (see below).
         """
         self.name = name                             # instance attribute

     def __str__(self):                               # special method
         """This method is run when Python tries 
         to cast the object to a string. Return 
         this string when using print(), etc.
         """
         return self.name

     def rename(self, renamed):                       # regular method
         """Reassign and print the name attribute."""
         self.name = renamed
         print("Now my name is {}".format(self.name))

在檢視上面的示例時,有幾點需要注意。

  1. 該類由屬性 (資料)和方法 (函式)組成。
  2. 屬性和方法簡單地定義為正常變數和函式。
  3. 如相應的 docstring 中所述,__init__() 方法稱為初始化程式。它等同於其他面嚮物件語言中的建構函式,並且是在建立新物件或類的新例項時首先執行的方法。
  4. 首先定義適用於整個類的屬性,並將其稱為類屬性
  5. 適用於類(物件)的特定例項的屬性稱為例項屬性。它們通常在 __init__() 中定義; 這不是必需的,但建議(因為在 __init__() 之外定義的屬性在定義之前存在被訪問的風險)。
  6. 包含在類定義中的每個方法都將有問題的物件作為其第一個引數傳遞。self 這個詞用於這個引數(self 的用法實際上是按慣例使用的,因為詞 self 在 Python 中沒有固有含義,但這是 Python 最受尊敬的約定之一,你應該總是遵循它)。
  7. 那些習慣於用其他語言進行物件導向程式設計的人可能會對一些事情感到驚訝。一個是 Python 沒有 private 元素的真實概念,所以預設情況下,所有內容都模仿 C++ / Java public 關鍵字的行為。有關詳細資訊,請參閱此頁面上的私有類成員示例。
  8. 一些類的方法有以下形式:__functionname__(self, other_stuff)。所有這些方法都稱為魔術方法,是 Python 中類的重要組成部分。例如,Python 中的運算子過載是使用魔術方法實現的。有關更多資訊,請參閱相關文件

現在讓我們舉一些我們的 Person 類!

>>> # Instances
>>> kelly = Person("Kelly")
>>> joseph = Person("Joseph")
>>> john_doe = Person("John Doe")

我們目前有三個 Person 物件,kellyjosephjohn_doe

我們可以使用點運算子 . 從每個例項訪問類的屬性。再次注意類和例項屬性之間的區別:

>>> # Attributes
>>> kelly.species
'Homo Sapiens'
>>> john_doe.species
'Homo Sapiens'
>>> joseph.species
'Homo Sapiens'
>>> kelly.name
'Kelly'
>>> joseph.name
'Joseph'

我們可以使用相同的點運算子 . 執行類的方法:

>>> # Methods
>>> john_doe.__str__()
'John Doe'
>>>  print(john_doe)
'John Doe'
>>>  john_doe.rename("John")
'Now my name is John'