python中如何寫類

類的定義python

Python中,定義類是經過class關鍵字,例如咱們定義一個存儲學生信息的類:c++

class Student(object):pass


class後面緊接着是類名,即Student,類名一般是大寫開頭的單詞,緊接着是(object),表示該類是從哪一個類繼承下來的。一般,若是沒有合適的繼承類,就使用object類,這是全部類最終都會繼承的類。安全

定義好了Student類,就能夠根據Student類建立出Student的實例,建立實例是經過類名+()實現的:socket

>>> bart = Student()>>> bart<__main__.Student object at 0x10a67a590>>>> Student<class '__main__.Student'>


能夠看到,變量bart指向的就是一個Student的實例,後面的0x10a67a590是內存地址,每一個object的地址都不同,而Student自己則是一個類。ide

能夠自由地給一個實例變量綁定屬性,好比,給實例bart綁定一個name屬性:函數

>>> bart.name = 'Bart Simpson'>>> bart.name'Bart Simpson'


這點與靜態語言,好比C++是不同的。咱們能夠隨時給一個對象添加屬性。編碼

在python中,類的屬性就等同於c++類的成員變量,類的方法等同於c++類的成員函數。spa

因爲類能夠起到模板的做用,所以,能夠在建立實例的時候,把一些咱們認爲必須綁定的屬性強制填寫進去。經過定義一個特殊的init方法,在建立實例的時候,就把name,score等屬性綁上去:對象

class Student(object): def __init__(self, name, score): self.name = name self.score = score


對比c++,__init__函數就等同於c++類得構造函數,注意:特殊方法「init」先後有兩個下劃線。繼承

注意到init方法的第一個參數永遠是self,表示建立的實例自己,所以,在init方法內部,就能夠把各類屬性綁定到self,由於self就指向建立的實例自己。

有了init方法,在建立實例的時候,就不能傳入空的參數了,必須傳入與init方法匹配的參數,但self不須要傳,Python解釋器本身會把實例變量傳進去:

>>> bart = Student('Bart Simpson', 59)>>> bart.name'Bart Simpson'>>> bart.score59


和普通的函數相比,在類中定義的函數只有一點不一樣,就是第一個參數永遠是實例變量self,而且,調用時,不用傳遞該參數。除此以外,類的方法和普通函數沒有什麼區別,因此,你仍然能夠用默認參數、可變參數、關鍵字參數和命名關鍵字參數。

咱們能夠給咱們定義的Student類增長新的方法,好比get_grade:

class Student(object):  ...  def get_grade(self): if self.score >= 90: return 'A' elif self.score >= 60: return 'B' else: return 'C'


知識點擴展:

構建和初始化

相信你們都熟悉這個最基礎的神奇方法 __ init__。它令你能自定義一個對象的初始化行爲。而當我調用x=SomeClass() 時,__ init__ 並非最早被調用的。實際上有一個叫作 __ new__ 的方法,事實上是它建立了實例,它傳遞任何參數給初始化程序來達到建立的目的。在對象生命週期結束時,調用 __ del__。讓咱們更近地觀察下這 3 個神奇方法吧:

__ new__(cls,[...)

一個對象的實例化時 __ new__ 是第一個被調用的方法。在類中傳遞其餘任何參數到 __ init__。__new__不多被使用,這樣作確實有其目的,特別是當一個子類繼承一個不可改變的類型(一個元組或一個字符串)時。我不打算再繼續深刻追求 __ new __ 的細節了,由於這不會產生多大用處,由於在 Python Docs 內已經涵蓋了一份巨詳細的說明了。

__ init__(self,[...)

類的初始化。它會得到初始構建調用傳過來的任何東西(舉例來講就是,當咱們調用x=SomeClass(10,'foo'),__ init__ 就會把傳過來的 10 和 'foo' 做爲參數。__init__在 Python 的類定義中幾乎廣泛被使用)

__ del__(self)

若是 __ new__和 __ init__ 是對象的構造器,那麼 __ del__ 就是析構器。它不實現聲明爲del x(這樣的代碼不會解釋成 x.__ del__())的行爲。相反,它定義爲當一個對象被垃圾回收時的行爲。這可能對可能須要額外清理的對象至關有用,好比 sockets 或文件對象。但要當心,若是對象仍處於存活狀態而當被解釋退出時,__ del__ 沒有保證就會被執行,所以這樣的__ del__ 不能做爲良好的編碼規範的替代。(就像當你完成操做老是要關閉一次鏈接。但事實上,__ del__ 幾乎永遠不會執行,就由於它處於不安全狀況被調用了。使用時保持警戒!)

到此這篇關於python中如何寫類的文章就介紹到這了,更多相關python中寫類的方法內容請搜索之前的文章或繼續瀏覽下面的相關文章但願你們之後多多支持!

相關文章
相關標籤/搜索