python中定义类
3.2. 定義類
Python是完全面向對象的:可以定義自已的類,從自已的或內置類進行繼承,然后對生成的類進行實例化。
在Python中定義類很簡單;就象定義函數,沒有獨立的定義接口。只要定義類,然后編碼就可以了。Python類以保留字 class 開始,跟著是類的名字。從技術上說,有這些就足夠了,因為一個類不需要從任何其它類繼承而來。
例 3.3. 最簡單的Python類
class foo: pass| 這個類的名字是 foo,它沒有從任何其它的類繼承而來。 | |
| 這個類沒有定義任何方法或屬性,但是從語法上,需要在定義中有些東西,所以我們使用了 pass。這是一個Python保留字,僅僅表示“向前走,不要往這看”。它相當于C++中的大括號空集({})或者是Java中的單個分號。它是一條什么都不做的語句,當你刪除函數或類時,它是一個很好的占位符。 | |
| 你可能猜到了,在類中的每條語句都是縮排的,就象函數內的代碼, if 語句, for 循環,等等。第一條不縮近的語句不屬于這個類。 |
當然,實際上大多數的類將從其它的類繼承來的,并且它們將定義自已的類方法和屬性。但是如你所見,除了名字以外,沒有什么東西是一個類必須擁有的。特別是,C++程序員可能會感到奇怪,Python的類沒有明確的構造器和析構器。Python類的確存在同一個構造器相似的東西: __init__ 方法。
例 3.4. 定義 FileInfo 類
from UserDict import UserDict class FileInfo(UserDict): "store file metadata" def __init__(self, filename=None): UserDict.__init__(self) self["name"] = filename| 類的祖先被列在立即跟在類名字后面的小括號里。所以 FileInfo 類是從 UserDict 類(這個類從 UserDict 中導入)繼承而來。UserDict 是一個象字典一樣動作的類,它允許你完全子類化字典數據類型,同時增加你自已的行為。(也存在相似的類 UserList 和 UserString ,它們允許你子類化列表和字符串。)在這個類的背后有一些“巫術”,我們將在本章的后面,隨著更進一步地研究 UserDict 類,揭開這些秘密。 | |
| 類也可以有文檔字符串,就象模塊和函數。 | |
| __init__ 在類的實例創建后立即被調用。它可能會誘使你,但是不正確地,叫它為類的構造器。說它誘使,是因為它看上去象構造器(按照習慣, __init__ 是類中第一個定義的方法),象構造器一樣動作(在一個新創建的類實例中,它是首先被執行的代碼),并且聽起來也象構造器(“init”當然意味著構造的本性)。說它不正確,是因為對象在 __init__ 被調用的時刻已經被構造出來了,你已經有了對類的新實例一個有效的引用。 | |
| 每一個類方法的第一個參數,包括 __init__,總是指向類的當前實例的一個引用。按照習慣這個參數被命名為 self。(除了 self 不要把它命名為別的東西,這是一個非常強烈的習慣。) self 象C++中的保留字 this。在 __init__ 方法中, self 指向新創建的對象;在其它的方法中,它指向方法被調用的對象。 | |
| __init__ 方法可以接受任意個數的參數,就象函數一樣,參數可以用缺省值定義,可以設置成對于調用者可選。在本例中, name 有一個缺省值 None,即Python的空值。 | |
| 一些偽面向對象語言,象Powerbuilder有一種“擴展”構造器和其它事件的概念,即父類的方法在子類的方法執行前被自動調用。Python不這樣做,你必須總是顯示調用在父類中適合的方法。同樣,當調用父類方法時,你必須包含 self 參數,跟著類方法所接受的任何其它類型。在本例中,我們沒有使用參數(除了 self)調用 UserDict 類的 __init__ 方法。 | |
| 我對你說過,這個類的象字典一樣動作,那么這里就是第一個印象。我們將參數 filename 賦值給對象 name 關鍵字,作為它的值。 | |
| 注意 __init__ 方法從不返回一個值。 |
噢。我知道有很多知識需要吸收,但是你要掌握它。所有的Python類以相同的方式工作,所以一旦你學會了一個,就是學會了全部。再加上,在Python社區中有強烈的習慣,對于每個類方法的第一個參數都命名為“self”,所以你不會浪費大量時間去習慣他人的風格。如果你忘了別的任何事,也要記住這件事,因為我認定它會讓你出錯:
| __init__ 方法是可選的,但是一旦你定義了一個,就必須記得顯示調用父類的 __init__ 方法。這樣更是正確的:何時一個子類想擴展父類的行為,后代方法必須在適當的時機,使用適當的參數,顯式調用父類方法。 | |
轉載于:https://www.cnblogs.com/starspace/archive/2008/12/11/1353231.html
總結
以上是生活随笔為你收集整理的python中定义类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用vs2005 开发arcims htm
- 下一篇: [转]Linux系统中用户帐户清洁与安全