python函數(shù)如何重載,python 支持函數(shù)重載

python類的繼承和單例模式 singleton、運算符重載

@[toc]

創(chuàng)新互聯(lián)公司是專業(yè)的景東網(wǎng)站建設(shè)公司,景東接單;提供網(wǎng)站設(shè)計制作、網(wǎng)站設(shè)計,網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進行景東網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!

全局只有一個實例

font color=#03a3e3 該實現(xiàn)方式在多線程場景下不安全

繼承其他類的類稱為派生類(derived class)

被其他類繼承的類稱為這些類的基類(base

class)

需要注意圓括號中基類的順序:font color=#03a3e3 從左到右搜索 font

多繼承會導(dǎo)致菱形 diamond關(guān)系:有至少一個基類可以從子類經(jīng)由多個繼承路徑到達

基類方法可能被多次調(diào)用

防止重復(fù)訪問,每個基類只調(diào)用一次

通過子類實例對象課調(diào)用父類已被覆蓋

慎用多繼承(二義性)

– 對已有的運算符重新進行定義,賦予其另一種功能,以適應(yīng)不同的數(shù)據(jù)類型

– 運算符重載不能改變其本來寓意

– 運算符重載只是一種 “語法上的方便” (sugar)

– 是一種函數(shù)調(diào)用的方式

怎么理解Python中重載?通俗理解是

python里面沒有重載吧?

正常的重載說的應(yīng)該是函數(shù)方法的重載,即兩個函數(shù)的名稱相同但是參數(shù)不同是重載,會出現(xiàn)重載的情況一般是函數(shù)實現(xiàn)相同功能時,遇到參數(shù)類型可能不同的情況,會出現(xiàn)重載,如比較常見的對于加法的實現(xiàn),如果輸入兩個整數(shù)相加則直接使用整數(shù)加法,如果兩個字符串相加則使用字符串的拼接。輸入的參數(shù)類型不同,其實是兩個不同的函數(shù),這在那種強類型語言中是可以利用函數(shù)重載來實現(xiàn)的,而python中函數(shù)類型是動態(tài)的各種各樣的,所以不需要重載這個機制。相同函數(shù)名就是表示同一個方法。

python 有沒有方法的重載

Python 類可以定義專用方法,專用方法是在特殊情況下或當使用特別語法時由 Python 替你調(diào)用的,而不是在代碼中直接調(diào)用(象普通的方法那樣)。

.1 __init__

類似于構(gòu)造函數(shù)

#!/usr/local/bin/python

class Study:

def __init__(self,name=None):

self.name = name

def say(self):

print self.name

study = Study("Badboy")

study.say()

.2 __del__

類似于析構(gòu)函數(shù)

#!/usr/local/bin/python

class Study:

def __init__(self,name=None):

self.name = name

def __del__(self):

print "Iamaway,baby!"

def say(self):

print self.name

study = Study("zhuzhengjun")

study.say()

.3__repr__

使用repr(obj)的時候,會自動調(diào)用__repr__函數(shù),該函數(shù)返回對象字符串表達式,

用于重建對象,如果eval(repr(obj))會得到一個對象的拷貝。

#!/usr/local/bin/python

class Study:

def __init__(self,name=None):

self.name = name

def __del__(self):

print "Iamaway,baby!"

def say(self):

print self.name

def __repr__(self):

return "Study('jacky')"

study = Study("zhuzhengjun")

study.say()

print type(repr(Study("zhuzhengjun"))) # str

print type(eval(repr(Study("zhuzhengjun")))) # instance

study = eval(repr(Study("zhuzhengjun")))

study.say()

.4__str__

Python能用print語句輸出內(nèi)建數(shù)據(jù)類型。有時,程序員希望定義一個類,要求它的對象也能用print語句輸出。Python類可定義特殊方法__str__,為類的對象提供一個不正式的字符串表示。如果類的客戶程序包含以下語句:

print objectOfClass

那么Python會調(diào)用對象的__str__方法,并輸出那個方法所返回的字符串。

#!/usr/local/bin/python

class PhoneNumber:

def __init__(self,number):

self.areaCode=number[1:4]

self.exchange=number[6:9]

self.line=number[10:14]

def __str__(self):

return "(%s) %s-%s"%(self.areaCode,self.exchange,self.line)

def test():

newNumber=raw_input("Enter phone number in the form. (123) 456-7890: \n")

phone=PhoneNumber(newNumber)

print "The phone number is:"

print phone

if__name__=="__main__":

test()

方法__init__接收一個形如"(xxx) xxx-xxxx"的字符串。字符串中的每個x都是電話號碼的一個位數(shù)。方法對字符串進行分解,并將電話號碼的不同部分作為屬性存儲。

方法__str__是一個特殊方法,它構(gòu)造并返回PhoneNumber類的一個對象的字符串表示。解析器一旦遇到如下語句:

print phone

就會執(zhí)行以下語句:

print phone.__str__()

程序如果將PhoneNumber對象傳給內(nèi)建函數(shù)str(如str(phone)),或者為PhoneNumber對象使用字符串格式化運算符%(例如"%s"%phone),Python也會調(diào)用__str__方法。

.5__cmp __

比較運算符,0:等于 1:大于 -1:小于

class Study:

def __cmp__(self, other):

if other 0 :

return 1

elif other 0:

return - 1

else:

return 0

study = Study()

if study -10:print 'ok1'

if study -10:print 'ok2'

if study == 0:print 'ok3'

打?。簅k2 ok3

說明:在對類進行比較時,python自動調(diào)用__cmp__方法,如-10 0 返回 -1,也就是說study 應(yīng)該小與 -10,估打印ok2

.6__getitem__

__getitem__ 專用方法很簡單。象普通的方法 clear,keys 和 values 一樣,它只是重定向到字典,返回字典的值。

class Zoo:

def __getitem__(self, key):

if key == 'dog':return 'dog'

elif key == 'pig':return 'pig'

elif key == 'wolf':return 'wolf'

else:return 'unknown'

zoo = Zoo()

print zoo['dog']

print zoo['pig']

print zoo['wolf']

打印 dog pig wolf

.7__setitem__

__setitem__ 簡單地重定向到真正的字典 self.data ,讓它來進行工作。

class Zoo:

def __setitem__(self, key, value):

print 'key=%s,value=%s' % (key, value)

zoo = Zoo()

zoo['a'] = 'a'

zoo['b'] = 'b'

zoo['c'] = 'c'

打?。?/p>

key=a,value=a

key=b,value=b

key=c,value=c

.8 __delitem__

__delitem__ 在調(diào)用 del instance[key] 時調(diào)用 ,你可能記得它作為從字典中刪除單個元素的方法。當你在類實例中使用 del 時,Python 替你調(diào)用 __delitem__ 專用方法。

class A:

def __delitem__(self, key):

print 'delete item:%s' %key

a = A()

del a['key']

關(guān)于python的重載問題

沒有重載,但是可以有默認參數(shù)和不定長參數(shù),可以判斷默認值和參數(shù)長度來處理。

比如:

def range(start, end = -1):

if end == -1:

end = start

start = 0

def range(*args):

if len(args) == 1:

start = 0

end = args[0]

elif len(args) == 2:

start, end = args[0], args[1]

名稱欄目:python函數(shù)如何重載,python 支持函數(shù)重載
瀏覽路徑:http://muchs.cn/article20/hcicco.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、網(wǎng)頁設(shè)計公司App開發(fā)、虛擬主機、Google網(wǎng)站導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設(shè)計