Python 命名一般來(lái)說(shuō)有一下不成文的規(guī)則 :
新絳網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián)公司,新絳網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為新絳上千提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)公司要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的新絳做網(wǎng)站的公司定做!
模塊名一般使用全部小寫 如 myphone
類名第一個(gè)字母大寫,如果有多個(gè)單詞,每一個(gè)單詞的第一個(gè)字母大寫如 : MyPhone
函數(shù)名 : 小寫, 如果有多個(gè)單詞用下劃線隔開 如 my_phone
常量名字一般全大寫 : MYPHONE
給你這樣一個(gè)例子吧,這個(gè)例子里面有動(dòng)態(tài)增加類的函數(shù)。
聲明一個(gè)類,類初始化的時(shí)候讀取配置文件,根據(jù)配置列表加載特定目錄下的模塊下的函數(shù),函數(shù)和模塊同名,將此函數(shù)動(dòng)態(tài)加載為類的成員函數(shù)。
代碼如下所示:
class WinBAS(Bas):
def __init__(self):
self.__baslist = {}
self.__Init_Modules()
pass
def __Init_Modules(self):
import modplugs
for m in modplugs.__moduleset__:
mh = __import__('modules.' + m)# + '.' + m)
ma = getattr(mh, m)# + '.' + m)
ma = getattr(ma, m)
setattr(self.__class__, m, ma)
modplugs.py是模塊配置文件如下:
__moduleset__ = [
'BAS_GetUserList',
]
然后建立目錄modules下面建立一個(gè)空的__init__.py文件,把目錄變?yōu)橐粋€(gè)包,在modules目錄下建立真正的BAS_GetUserList實(shí)現(xiàn):BAS_GetUserList文件中有個(gè)BAS_GetUserList函數(shù)如下:
def BAS_GetUserList(self, strs):
return [0, strs]
這樣WinBAS類就可以動(dòng)態(tài)加入了BAS_GetUserList函數(shù)。
定義一個(gè)A類,然后實(shí)例化一個(gè)A對(duì)象,通過(guò)setattr函數(shù)來(lái)給當(dāng)前類添加一個(gè)變量,值是test函數(shù)。調(diào)用haha函數(shù),就相當(dāng)于調(diào)用了test函數(shù)。 例2,定義一個(gè)模塊,通過(guò)另一個(gè)模塊函數(shù)調(diào)用函數(shù)來(lái)增加變量,值是test2函數(shù)。調(diào)用haha函數(shù),就相當(dāng)于調(diào)用了test2函數(shù)。
原理
python系統(tǒng)會(huì)維護(hù)一個(gè)變量的字典,可以通過(guò)locals()或者globals()獲取到該字典。由于字典是可變對(duì)象,那么,就可以動(dòng)態(tài)的增加變量。由于函數(shù)也是一個(gè)對(duì)象,那么就可以將變量指向函數(shù)。這樣就可以達(dá)到動(dòng)態(tài)修改函數(shù)名的目的了。