2 1Python之類和例項

2021-08-17 22:56:17 字數 3855 閱讀 2937

類(class)是乙個使用者自定義型別,開發者可以將其實例化以獲得例項(instance),例項表示這種型別的物件。在python中,類就是物件,開發者可以像對其他物件那樣處理函式,可以在呼叫函式時傳遞乙個類作為引數,也可以返回乙個類作為函式呼叫的結果。任何物件,即使是乙個類物件,都有乙個型別。在python中,型別和類也都是第一類物件。類物件的型別也被稱為該類的元類(metaclass)。物件的行為主要是由該類物件的型別確定的。這也適用於類:類的行為也是主要由該類的元類確定的。

class語句是建立乙個類物件最常用的方法。如下:

class classname(base_classes):

statement(s)

classname是乙個識別符號。該識別符號是乙個在執行完class語句之後被繫結到類物件的變數。base_classes是乙個使用逗號分隔的表示式序列,這些表示式的值必須是類物件。例如:

class

c(b1,b2): #b1和b2都是類

statement(s)

最後,請注意,class語句並不直接建立新類的任何乙個例項,而是定義了在以後呼叫這個類建立例項時,所有例項共有的屬性集(即類物件屬性)。

通常可以通過將乙個值繫結到類體中的乙個識別符號上來指定類物件的乙個屬性(即類屬性)。例如:

class

c1(object):

x = 23

print c1.x #print:23

類物件c1包含乙個名為x的屬性,該屬性被繫結為值23。我們應該知道,在例項被建立時,任何類屬性都由該類的所有例項隱式共享。

類物件會隱式設定某些類屬性。屬性__name__是類名識別符號字串。屬性__bases__是類的基類的類物件的元組。例如:

print c1.__name__, c1.__bases__            #print: c1, ()
類物件還包含乙個屬性__dict__,這個屬性是該類的字典物件,被用來儲存所有其他屬性。對於任何類物件c、任何物件x,以及任何識別符號s(除了__name__、__bases__和__dict__),c.s等於c.__dict__[『s』]=x。例如:

c1.y = 45

c1.__dict__['z']= 67

print c1.y,c1z #print: 45, 67

類的例項是乙個帶有任意名稱的屬性的python物件,開發者可以繫結和引用這些屬性。要想建立乙個類的例項,可以呼叫類物件,就像該物件是乙個函式一樣。每個呼叫都將返回乙個型別為該類的新例項:

aninstance =c1()
開發者可以呼叫內建函式isinstance(i, c),並使用乙個類物件作為引數c。如果物件i是類c或類c的任何子類的乙個例項,則instance將返回true,否則返回false。

當乙個類定義或繼承了乙個名為__init__的方法時,呼叫該類物件將對新例項隱式執行__int__方法以執行任何需要的與例項相關的初始化。該呼叫中傳遞的引數必須對應於__init__的引數,除了引數self。例如:

class

c6(objec):

def__init__(self, n);

self.x = n

建立類c6的乙個例項:

aninstance =c6(42)
__init__的主要目的就是繫結,並因此建立新建立的例項的屬性。__init__方法不能返回乙個值,否則,python將引發乙個typeerror異常。

對於任何例項z,z..__class__是z所屬的類物件,而z..__dict__是z用來儲存其他屬性的字典。例如:

print aninstance.__classs__.__name__, aninstance .__dict__              #print: c6,
對於任何例項z,任何物件x和任何識別符號s(除了__classs和__dict__),z.s = x等於z.__dict__[『s』] = x。例如:

z

.y = 45

z.__dict__['z'] = 67

print z

.y, z

.z#print: 45, 67

每個新型累都有(或者繼承了)乙個名為__new__的靜態方法。當開發者呼叫c(*args, **kwds)來建立類c的乙個例項時,python將首先呼叫c.__new__(c,*args, **kwds)。python使用__new__的返回值x作為新建立的例項。然後,python將呼叫c.__init__(x,*args, **kwds),但是只有在x確認是c的乙個例項,或者c的任何乙個子類時才會呼叫該方法。例如:語句x = c(23)等同於:

x = c.__new__(c, 23)

if isinstance(x, c):

type

(x).__init__(x, 23)

object.__new__可以建立其接受為第乙個引數的類的乙個新的和未初始化的例項。如果這個類包含乙個__init__方法,則該方法將忽略其他引數,但是,如果除了第乙個引數,該方法還接受了其他引數,並且第乙個引數的類不包含__init__方法,則該方法將引發乙個異常。下面通過實現singleton設計模式來演示上面內容。

從上面執行結果我們可以看出,建立乙個新例項時,先呼叫new方法,再呼叫init方法。單例項通過重寫new方法,第二次例項化時,new返回上次的例項,然後該例項再次呼叫init方法。

2 1 Python 檔案方法

python open 方法用於開啟乙個檔案,並返回檔案物件,在對檔案進行處理過程都需要使用到這個函式,如果該檔案無法被開啟,會丟擲 oserror。注意 使用 open 方法一定要保證關閉檔案物件,即呼叫 close 方法。open 函式常用形式是接收兩個引數 檔名 file 和模式 mode o...

二 2 1Python列表 元組和字典

列表 index 符合條件的list下標 l a b c d e 1,2,3 print l.index c 執行結果 2 insert 符合條件的list下標 l a b c d e 1,2,3 l.insert 2,12306 print l 執行結果 a b 12306 c d e 1,2,3...

(21)python元組的使用

元組 tuple 列表屬於可變序列,可以任意修改列表中的元素。元組屬於不可變序列,不能修改元組中的元素。因此,元組沒有增加元素 修改元素 刪除元素相關的方法。因此,我們只需要學習元組的建立和刪除,元組中元素的訪問和計數即可。元組支援如下操作 1.索引訪問 2.切片操作 3.連線操作 4.成員關係操作...