四Python對象和麪向對象(一)

1.使用from module import導入模塊 java

    Python有兩種導入模塊的方法,兩種都有用,一種前面已經介紹過了爲:import module;第二種導入的基本語法爲:from module import attr,和第一種的一個重要區別是,attr被直接導入到局部名字空間去了,能夠直接使用,而不須要加上模塊限定名。你能夠導入獨立的項或使用from module import * 來導入全部東西。   python

#-------------------------------------------------------------------------------
# coding: utf-8
# Purpose: 對象和麪向對象
#
# Author:      daokun.zhu
#
# Created:     19/02/2013
# Copyright:   (c) daokun.zhu 2013
#-------------------------------------------------------------------------------
import types
from types import FunctionType

if __name__ == '__main__':
    print(types.FunctionType)  #import types 生效了,輸出值爲:<class 'function'>
    print(FunctionType)        #from types import FunctionType,輸出值爲:<class 'function'>

    (1)types模塊不包含方法,只是表示每種Python對象類型的屬性。這個屬性必須用模塊名types來進行限定。 編程

    (2)from types import FunctionType使得FunctionType被導入到了當前名字空間,FunctionType能夠直接使用,與types無關了。 函數

2.定義類 this

    Python是徹底面向對象的:你能夠定義本身的類,從本身的或內置的類繼承,而後從你定義的類建立對象。 編碼

    在Python中定義類很簡單,就像定義函數,沒有單獨的接口定義。只要定義類,而後就能夠開始編碼。Python類以保留字class開始,後面跟着類名。 spa

    最簡單的Python類 code

class Loaf:
    pass

(1)這個類的名字是Loaf,它沒有從其餘類繼承。類名一般是第一個字母大寫。 對象

(2)這個類沒有定義任何方法和屬性,可是從語法上,須要在定義中有些東西,因此使用pass,這是一個Python的保留字,僅僅表示「向前走,不要往這看」。它是一個什麼都不作的佔位符語句,相似於java中的大括號空間({})。 繼承

(3)在類中全部的東西都要縮進。  

from collections  import UserDict

class FileInfo(UserDict):
    "store file metadata"
    def __init__(self,filename=None):
        UserDict.__init__(self)
        self["name"] = filename

(1)在Python中,類的基類只是簡單地列在類名後面的小括號裏,全部FileInfo是從UserDict類繼承來的。UserDict是一個像字典同樣工做的類,它容許你徹底子類化字典數據類型,同時增長你本身的行爲。

(2)Python支持多重繼承。在類名後面的小括號中,你能夠列出要繼承的類名,以逗號隔開。

(3)類也能夠有doc strings,就像方法和函數同樣。(「store file metadata」)。

(4)__init__在類的實例建立後被當即調用,看上去像類的構造函數,其實不是,由於對象在調用__init__時已經被構造出來了,它只是扮演了一個和構造函數很是類似的角色。

(5)每一個方法的第一個參數,都是指向類的當前實例的引用。按照習慣被稱爲self。定義方法時必須明確指出,但調用時不用指定。相似於java中的this。

(6)__init__方法能夠接受任意數目的參數,就像函數同樣,也能夠有缺省值。

(7)這個類能夠像字典同樣工做,咱們將參數filename賦值給對象name關鍵字,做爲它的值。

(8)__init__方法沒有返回值。

    NOTE:self

    當定義本身的類方法時,你必須明確將self做爲每個方法的第一個參數列出,包括__init__,當從你的類中調用父類的一個方法時,必須包括self參數。在類外部調用方法時,不須要對self指定任何值。

    NOTE:__init__

    __init__方法是可選的,可是一旦你定義了,就必須記得顯示調用父類的

    __init__方法(若是定義了它的話)。這樣更是正確的:不管什麼時候子類想擴展父類的行爲,必須在適當的時機,使用適當的參數,顯式調用父類方法。

3.類的實例化

    在Python中對類進行實例化很直接。要對類進行實例化,只要調用類(就好像它是一個函數),傳入定義在__init__方法中的參數。返回值將是新建立的對象。    

#-------------------------------------------------------------------------------
# coding:        utf-8
# Purpose:對象和麪向對象
#
# Author:      zdk
#
# Created:     20/02/2013
# Copyright:   (c) zdk 2013
#-------------------------------------------------------------------------------
import fileinfo

if __name__ == '__main__':
    f = fileinfo.FileInfo("D:\編程\python")
    print(f.__class__)  #<class 'fileinfo.FileInfo'>
    print(f.__doc__)    #store file metadata
    print(f)            #{'name': 'D:\\編程\\python'}
    print(f["name"])    #D:\編程\python

    (1)f = fileinfo.FileInfo("D:\編程\python") 建立FileInfo類(定義在fileinfo模塊中)的實例,並將新建立的實例賦值給變量f。傳入的參數 "D:\編程\python"將做爲在FileInfo中__init__方法中的filename參數。

    (2)每個類的實例都有一個內置的屬性:__class__,它是對象的類。

    (3)你能夠像對函數或模塊同樣來訪問實例的doc string。一個類的全部實例共享相同的doc string。

    (4) 當建立類實例時你傳入的參數被正確發送到__init__方法中,隨同一塊兒傳遞的還有self,它是Python自動添加的。 

    NOTE:Python中的垃圾回收

    當變量超出做用域時,會被自動地回收釋放空間。在2.0之前版本採用「引用計數」方法來進行垃圾回收;2.0及之後版本採用了「標記後清除」的方法來進行垃圾回收。

相關文章
相關標籤/搜索