一。單例模式
烏拉特前網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站設(shè)計(jì)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。成都創(chuàng)新互聯(lián)從2013年成立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)。
一般情況下,類可以生成任意個(gè)實(shí)例,而單例模式只生成一個(gè)實(shí)例
我們先用單例模式設(shè)計(jì)一個(gè)Rectangle類
然后用__new__方法設(shè)計(jì)單例模式,代碼如下
然后我們來驗(yàn)證下,單例模式下是否只能生成一個(gè)實(shí)例
單例模式在程序設(shè)計(jì)中比較典型的應(yīng)用場景:多個(gè)用戶同時(shí)調(diào)用某個(gè)模塊時(shí),會(huì)生成一些日志,我們希望這些日志存在同一個(gè)文件內(nèi),而不是多個(gè)文件。
在生成日志模塊我們就可以采用單例模式進(jìn)行設(shè)計(jì)。
二。反射
概念:簡單來說就是可以利用字符串來映射模塊中的相應(yīng)方法然后可以操作模塊中相應(yīng)的方法
我們以一個(gè)飯店點(diǎn)菜的實(shí)際場景來理解Python的反射機(jī)制
hasatter(對(duì)象,屬性或方法名)
判斷對(duì)象中是否有某個(gè)屬性或某個(gè)方法,返回值是布爾型
getattr(對(duì)象,屬性或方法名,缺省值) 判斷對(duì)象中是否有某個(gè)屬性或某個(gè)方法,如果有返回方法本身,沒有則返回缺省值
setattr(對(duì)象,屬性,新值)
將實(shí)例的屬性改為新的值,如果屬性不存在則新建
我們給實(shí)例guke1加個(gè)價(jià)格屬性
#?-*-?coding:?cp936?-*-
import?re
re0=re.compile(r'=')
re1=re.compile(r'[a-zA-Z]')
re2=re.compile(r'([^a-zA-Z]+)([a-zA-Z?]+)(.*)')
tmp=''
dict0={}
with?open('menu_items.txt','r')?as?file0:
for?i,j?in?enumerate(file0.readlines()):
if?j==''?or?re0.match(j):
pass
elif?re1.match(j):
tmp=j.strip()
dict0[tmp]=[]
elif?re2.match(j):
dict0[tmp].append(tuple(map(lambda?x:x.strip(),re2.match(j).groups())))
print?dict0
湊活用,不嚴(yán)謹(jǐn)
問題比較簡單。
主要是你diancai遞歸調(diào)用該函數(shù),當(dāng)?shù)诙蝸淼臅r(shí)候,又將下面這些數(shù)初始化一次:
int k,j=0,i=0,d[10],m ;
解決方案:
int k,j=0,i=0,d[10],m ;
void diancai()
{
j++;
cout" 菜單"endl;
for(k=0;k10;k++)
coutc1[k].cd" 價(jià)格:"c1[k].jgendl;
coutendl;
cout"請(qǐng)問需要點(diǎn)什么菜:"endl;
cind[i];
i++;
coutendl"是否還需要點(diǎn)菜:1.是 2.否"endl;
//////////////////
//加入這里的目的主要是當(dāng)點(diǎn)菜超過10次后,將自動(dòng)退出,不然又是數(shù)組越界問題。
if( i 10 )
{
cink;
}
else
{
i = 9;
k = 2;
}
//////////////////
switch(k)
{
case 1:system("cls");diancai();break;
case 2:
for(m=0;m=i;m++)
coutendl"確認(rèn)需要點(diǎn)的菜:"c1[d[m]].cd;
system("pause");
break;
}
}
這是在你代碼的基礎(chǔ)上更改,當(dāng)然還有其他的方法實(shí)現(xiàn),應(yīng)該會(huì)比這更加簡單。
#?coding:?utf-8
menu?=?{
'1':?dict(name='草莓冰淇淋',?price=20),
'2':?dict(name='香草冰淇淋',?price=10),
'3':?dict(name='香蕉冰淇淋',?price=15),
'5':?dict(name='巧克力冰淇淋',?price=30),
}
def?showmenu(menu):
for?k,?item?in?sorted(menu.items()):
print?"%(key)s:?%(name)s?價(jià)格%(price).2f"?%?dict(key=k,?**item)
def?menuchoice(menu):
while?True:
showmenu(menu)
c?=?raw_input("Your?Choice('.'?for?end):?")
if?c?==?'.':
break
else:
yield?menu.get(c)
customerchoice?=?filter(None,?menuchoice(menu))
print?"Total:?%.2f"?%?sum(map(lambda?x:?x["price"],?customerchoice))