這篇文章主要介紹了python面向?qū)ο笾瓷涞氖纠治?,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
為企業(yè)提供成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、網(wǎng)站優(yōu)化、營(yíng)銷型網(wǎng)站、競(jìng)價(jià)托管、品牌運(yùn)營(yíng)等營(yíng)銷獲客服務(wù)。成都創(chuàng)新互聯(lián)公司擁有網(wǎng)絡(luò)營(yíng)銷運(yùn)營(yíng)團(tuán)隊(duì),以豐富的互聯(lián)網(wǎng)營(yíng)銷經(jīng)驗(yàn)助力企業(yè)精準(zhǔn)獲客,真正落地解決中小企業(yè)營(yíng)銷獲客難題,做到“讓獲客更簡(jiǎn)單”。自創(chuàng)立至今,成功用技術(shù)實(shí)力解決了企業(yè)“網(wǎng)站建設(shè)、網(wǎng)絡(luò)品牌塑造、網(wǎng)絡(luò)營(yíng)銷”三大難題,同時(shí)降低了營(yíng)銷成本,提高了有效客戶轉(zhuǎn)化率,獲得了眾多企業(yè)客戶的高度認(rèn)可!一、靜態(tài)方法(staticmethod)和類方法(classmethod)
類方法:有個(gè)默認(rèn)參數(shù)cls,并且可以直接用類名去調(diào)用,可以與類屬×××互(也就是可以使用類屬性)
靜態(tài)方法:讓類里的方法直接被類調(diào)用,就像正常調(diào)用函數(shù)一樣
類方法和靜態(tài)方法的相同點(diǎn):都可以直接被類調(diào)用,不需要實(shí)例化
類方法和靜態(tài)方法的不同點(diǎn):
類方法必須有一個(gè)cls參數(shù)表示這個(gè)類,可以使用類屬性
靜態(tài)方法不需要參數(shù)
綁定方法:分為普通方法和類方法
普通方法:默認(rèn)有一個(gè)self對(duì)象傳進(jìn)來(lái),并且只能被對(duì)象調(diào)用-------綁定到對(duì)象
類方法:默認(rèn)有一個(gè)cls對(duì)象傳進(jìn)來(lái),并且可以被類和對(duì)象(不推薦)調(diào)用-----綁定到類
非綁定方法:靜態(tài)方法:沒(méi)有設(shè)置默認(rèn)參數(shù),并且可以被類和對(duì)象(不推薦)調(diào)用-----非綁定
import time class Date: def __init__(self,year,month,day): self.year=year self.month=month self.day=day # @staticmethod # def now(): # t=time.localtime() # return Date(t.tm_year,t.tm_mon,t.tm_mday) @classmethod #改成類方法 def now(cls): t=time.localtime() return cls(t.tm_year,t.tm_mon,t.tm_mday) #哪個(gè)類來(lái)調(diào)用,即用哪個(gè)類cls來(lái)實(shí)例化 class EuroDate(Date): def __str__(self): return 'year:%s month:%s day:%s' %(self.year,self.month,self.day) e=EuroDate.now() print(e) #我們想觸發(fā)EuroDate.__str__,此時(shí)e就是由EuroDate產(chǎn)生的,結(jié)果如我們所愿 ''' 輸出結(jié)果: year:2017 month:3 day:3 '''
二、反射
反射:可以用字符串的方式去訪問(wèn)對(duì)象的屬性,調(diào)用對(duì)象的方法(但是不能去訪問(wèn)方法),python中一切皆對(duì)象,都可以使用反射。
反射有四種方法:
hasattr:hasattr(object,name)判斷一個(gè)對(duì)象是否有name屬性或者name方法。有就返回True,沒(méi)有就返回False
getattr:獲取對(duì)象的屬性或者方法,如果存在則打印出來(lái)。hasattr和getattr配套使用
需要注意的是,如果返回的是對(duì)象的方法,返回出來(lái)的是對(duì)象的內(nèi)存地址,如果需要運(yùn)行這個(gè)方法,可以在后面添加一對(duì)()
setattr:給對(duì)象的屬性賦值,若屬性不存在,先創(chuàng)建后賦值
delattr:刪除該對(duì)象指定的一個(gè)屬性
1、對(duì)象應(yīng)用反射
class Foo: def __init__(self): self.name = 'egon' self.age = 51 def func(self): print('hello') egg = Foo() print(hasattr(egg,'name')) #先判斷name在egg里面存在不存在,結(jié)果是True print(getattr(egg,'name')) #如果為True它才去得到,結(jié)果是egon print(hasattr(egg,'func')) #結(jié)果是True print(getattr(egg,'func')) #得到的是地址> getattr(egg,'func')() #在這里加括號(hào)才能得到,因?yàn)閒unc是方法,結(jié)果是hello 一般用法如下,先判斷是否hasattr,然后取getattr if hasattr(egg,'func'): getattr(egg,'func')() #結(jié)果是hello else: print('沒(méi)找到')
2、類應(yīng)用反射
class Foo: f = 123 @classmethod def class_method_dome(cls): print('class_method_dome') @staticmethod def static_method_dome(): print('static_method_dome') print(hasattr(Foo,'class_method_dome')) #結(jié)果是True method = getattr(Foo,'class_method_dome') method() #結(jié)果是class_method_dome print(hasattr(Foo,'static_method_dome')) #結(jié)果是True method1 = getattr(Foo,'static_method_dome') method1() #結(jié)果是static_method_dome
3、模塊應(yīng)用反射
# 1.導(dǎo)入其他模塊引用
import mymodule print(hasattr(mymodule,'test')) getattr(mymodule,'test')() p = getattr(mymodule,'test') p() #相當(dāng)于上面getattr(mymodule,'test')()
# 2.在本模塊中應(yīng)用反射
def demo1(): print('hello') import sys module_obj = sys.modules[__name__] #相當(dāng)于'__main__' print(module_obj) #結(jié)果是print(hasattr(module_obj,'demo1')) #結(jié)果是True getattr(module_obj,'demo1')() #結(jié)果是hello
導(dǎo)入自己的模塊的例子:
def 注冊(cè)(): print('regiester') def 登錄(): print('login') def 購(gòu)物(): pass print('注冊(cè),登錄,購(gòu)物') ret = input('請(qǐng)輸入你要做的操作:') import sys my_module = sys.modules[__name__] #利用sys模塊導(dǎo)入一個(gè)自己的模塊 if hasattr(my_module,ret): getattr(my_module,ret)()
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“python面向?qū)ο笾瓷涞氖纠治觥边@篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!