python之物件導向程式設計

2021-09-24 02:41:07 字數 2408 閱讀 1984

當使用"類名( [實參])"建立例項物件時,python直譯器的主要處理過程包括兩大步:

首先會查詢該類物件是否實現了特殊方法__new__(), 如果沒有實現,則去其父類中依次查詢,直到類物件object。

class parent (object):

def __new__ (cls, *args, **kwargs):

pass

class child(parent):

def __init__(self, name):

pass

id (parent) #返回結果74270440

id(child) #返回結果74278936

對於自定義類物件的例項物件,在預設情況下,是不能像列表和字典那樣使用中括號語法來運算元據的。

如果想讓自定義類物件的例項物件可以像列表和字典那樣,使用中括號語法來運算元據,必須在自定義類物件中實現以下特殊方法:

class mydict(object):

def __init__ (self):

self. data = {}

def __getitem__ (self, key):

return self.data[key]

def __setitem__(self, key, value) :

self. data[key] = value

def __delitem__(self, key):

del self. data [key]

md = mydict()

md["one"] = 18

md["two"] = 32

print (md.data) #返回結果:

del md[" two"]

print (md. data) #返回結果:

如果在類物件中實現了特殊方法__call__ (), 那麼就可以像呼叫函式一樣直接呼叫這個類物件的例項物件,從而會自動呼叫特殊方法call_ ()。

class myclass(object) :

def __call__ (self, *args, **kwargs) :

print (args, kwargs)

mc= myclass()

mc() #返回結果:() {}

mc(1,2,x=3,y=4) #返回結果:(1, 2) )) #3

class myclass (object):

pass

print(len(myclass())) #執行錯誤

如果想讓內建函式len( )的實參可以是自定義類物件的例項物件,必須在自定義類物件中實現特殊方法__len__ (), 這樣,呼叫內建函式len()時,在其內部會自動呼叫實參所對應類物件的特殊方法__len__().之所以內建函式len()的實參可以是上述內建類物件的例項物件,是因為上述的內建類物件中都實現了特殊方法__len__()。

class myclass (object) :

def __len__(self):

return 18

print(len(myclass())) #返回結果:18

檢視生成器對應的所有元素,有兩種方式:

使用for-in語句對生成器進行迭代,這樣就不需要關心異常stopiteration了。

生成器函式 yield

from collections import iterable

print(isinstance([1, 2, 3], iterable)) #true

print (isinstance( abc' , iterable)) #true

print (isinstance((i * i for i in range(1, 7)), iterable)) #true

如果乙個可迭代対象可以作カ內建函式next()的實參從而支援惰性推算,那麼該対象被稱為迭代器(iterator) 物件。

對於range、列表、元組、字串、字典和集合等可迭代対象,都不可以作カ內建函式next( )的實參,而生成器可以。所以,生成器是迭代器的一種。

可以呼叫內建函式isinstance()判斷乙個物件是否是迭代器物件。標準庫模組collections中的類iterator用於表示迭代器物件。

可以呼叫內建函式iter()把不支援惰性推算的可迭代物件轉換為迭代器物件。

如果乙個物件同時實現了特殊方法__iter__ ()和__next__ (), 那麼該物件也被稱為迭代器物件。如果將該物件用於for- in語句,for- in語句首先會呼叫特殊方法__iter__()返回乙個可迭代物件,然後不斷呼叫該可迭代物件的特殊方法__next__ ()返回下一 次迭代的值直到遇到stopiteration時退出迴圈。

python之物件導向程式設計

物件導向的程式設計的核心是物件 上帝式思維 要理解物件為何物,必須把自己當成上帝,上帝眼裡世間存在的萬物皆為物件,不存在的也可以創造出來。物件是特徵和技能的結合,其中特徵和技能分別對應物件的資料屬性和方法屬性。優點是 解決了程式的擴充套件性。對某乙個物件單獨修改,會立刻反映到整個體系中,如對遊戲中乙...

Python之物件導向程式設計

類和物件 類是抽象的模板,比如我們抽象乙個學生類,很容易想到學生固有的一些屬性,比如名字,年齡等等,建立乙個學生類 class student object pass 複製 這裡的object是表明student類是從哪個類繼承來的,在python中object是所有類的父類 繼承的概念下文會提及 ...

Python之物件導向程式設計介紹

面向過程 procedure oriented 是一種以過程為中心的程式設計思想。這些都是以什麼正在發生為 目標進行程式設計,不同於物件導向的是誰在受影響。與物件導向明顯的不同就是封裝 繼承 類。例如 五子棋,面向過程的設計思路就是首先分析問題的步驟 1 開始遊戲,2 黑子先走,3 繪製畫面,4 判...