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及之後版本採用了「標記後清除」的方法來進行垃圾回收。