青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Sunshine Alike

半完美主義

  C++博客 :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
  35 Posts :: 1 Stories :: 56 Comments :: 0 Trackbacks

常用鏈接

留言簿(15)

積分與排名

  • 積分 - 51192
  • 排名 - 451

最新隨筆

最新評論

學(xué)習(xí)了一些Python的基礎(chǔ)知識之后,就開始來實踐吧。
上手非常簡單,有過一定編程經(jīng)驗的人大約可以在幾個小時之內(nèi)掌握基本的Python編程方法。
正好在學(xué)習(xí)設(shè)計模式課程,會有幾次課程作業(yè),就直接拿過來權(quán)當(dāng)Python的一次編程練習(xí)了
第一次任務(wù)簡介:
實現(xiàn)一個管理雇員薪水的工具,可以打印出員工的薪水信息。
雇員分為普通和經(jīng)理,各自有不同的薪水計算方法。

Ok,Let's go!
首先復(fù)習(xí)一下Python里的面向?qū)ο笙嚓P(guān)知識,定義一個雇員的基類EmployeeBase
并且在__init__方法里定義了三個成員name, base_salary和overtime_days
需要注意的就是所有的類成員方法在聲明的時候都需要有一個默認的參數(shù)self,這個相當(dāng)于this指針的東西必須要寫上,而且訪問類成員或者方法也都要加上這個前綴,不然會出錯。
1?class?EmployeeBase():
2?????"""Base?class?of?all?staffs"""
3?????def?__init__(self,?name?=?"",?basesalary?=?0,?overtime?=?0):
4?????????self.name?=?name
5?????????self.base_salary?=?basesalary
6?????????self.overtime_days?=?overtime
7?????def?GetName(self):
8?????????return?self.name

接下來就是普通雇員類Employee,繼承的語法:Employee(EmployeeBase)
以及類的__doc__,養(yǎng)成寫注釋的習(xí)慣。
Line 6:
__init__并不是構(gòu)造函數(shù),并且Python里也沒有構(gòu)造函數(shù)這個概念。所以要手動的調(diào)用基類的__init__方法
GetSalary中計算薪水,普通雇員的加班工資是雙倍計算的。

?1?class?Employee(EmployeeBase):
?2?????"""Common?employee?class?derived?from?EmployeeBase.
?3?????A?employee?can?has?overtime?salary,?every?overtime?work's?salary?will?be?doubled
?4?????"""
?5?????def?__init__(self,?name="",?basesalary=0,?overtime=0):
?6???????? EmployeeBase.__init__(self,name,basesalary,overtime)
?7?????def?GetStaffType(self):
?8?????????return?"Employee"
?9?????def?GetSalary(self):
10?????????return?self.base_salary?+?self.base_salary/30*2*self.overtime_days
11?????def?GetSalaryInfo(self):
12?????????return?self.name?+?"?:?"?+?self.GetStaffType()+?"?:?"?+?str(self.GetSalary())

到這里,雇員類已經(jīng)完成,下面就是——單元測試。一般我以前寫程序都很少寫單元測試的,因為很費時,要寫很多測試的代碼。
但是這里我想特別嘗試一下,以展現(xiàn)Python里的各種特性和工具。
新版本的Python里有一個專門用于測試的unittest模塊,導(dǎo)入就可以使用了,下面新建一個Testsalary.py進行單元測試。
首先unittest模塊里有一個測試用例的基類TestCase,我們只要在TestCase的派生類里定義自己的測試用例方法就可以使用了,這些測試用命方法甚至都不需要自己調(diào)用,只要方法名字以test開頭,TestCase就會自動的調(diào)用它們。
在下面的測試代碼中,我定義了testNoneEmployee等幾個測試方法,主要是使用了TestCase里的assertEqual方法。
"""Unit?test?for?salary.py"""
import?unittest
from salary importEmployee

class?TestEmployee(unittest.TestCase):
????
"""Unit?test?for?clas?Employee"""
????
def?testNoneEmployee(self):
????????e?
=?Employee()
????????self.assertEqual(
"",e.GetName())
????????self.assertEqual(0,e.GetSalary())
????????self.assertEqual(
"Employee",e.GetStaffType())
????
def?testBaseSalary(self):
????????e?
=?Employee("emp",?300)
????????self.assertEqual(
"emp",e.GetName())
????????self.assertEqual(
300,e.GetSalary())
????????self.assertEqual(
"Employee",e.GetStaffType())
????
def?testNoOvertime(self):
????????e?
=?Employee("emp",?300,?0)
????????self.assertEqual(
300,e.GetSalary())
????????self.assertEqual(
"emp?:?Employee?:?300",?e.GetSalaryInfo())
????
def?testOvertime1(self):
????????e?
=?Employee("emp",?300,?1)
????????self.assertEqual(
320,e.GetSalary())
????????self.assertEqual(
"emp?:?Employee?:?320",?e.GetSalaryInfo())
????
def?testOvertime2(self):
????????e?
=?Employee("emp",?300,?5)
????????self.assertEqual(
400,e.GetSalary())
????????self.assertEqual(
"emp?:?Employee?:?400",?e.GetSalaryInfo())
????????
if?__name__?==?"__main__":
????unittest.main()
運行之,出現(xiàn)結(jié)果:
----------------------------------------------------------------------
Ran
5 tests?in?0.007s

OK
全部通過,太沒意思了,想著要加點什么好呢。下面我對構(gòu)造Employee的時候加上參數(shù)的檢查,不允許不正確的參數(shù)輸入,例如名字太長,工資和加班天數(shù)為負數(shù)等。我希望在試圖用這些不正確的參數(shù)進行創(chuàng)建Employee對象的時候出現(xiàn)異常。
在測試代碼中加入另兩個方法,使用了TestCase里的另一個方法assertRaises,這個方法可以檢測被測對象是否按拋出了預(yù)期的異常。這個方法接受一個異常類型,和一個會產(chǎn)生這種異常的“對象”,通常是一個函數(shù),以及它們的參數(shù)
????def?testInvalidName(self):
????????self.assertRaises(InvalidName,?Employee,?
"name?too?long")
????
def?testInvalidInput1(self):
????????self.assertRaises(InvalidInput,?Employee,?
"emp",?-300)
????
def?testInvalidInput2(self):
????????self.assertRaises(InvalidInput,?Employee,?
"emp",?300,?-5)
兩種異常類的名字分別叫InvalidName和InvalidInput,這下測試通不過了。下面就需要修改Employee類,首先提一下Python里的異常處理,使用try...except...處理異常,raise拋出異常,finally可以用來做一些善后處理工作。
下面先要定義上面用到的這兩種異常,InvalidName和InvalidInput,這里簡單的繼承一下Python里的Exception類就可以了,然后修改Employee的__init__方法,進行參數(shù)的查檢,修正后如下:
#new?type?of?Expceptions
class?InvalidName(Exception):pass
class?InvalidInput(Exception):pass


#----------------------


????
def?__init__(self,?name="",?basesalary=0,?overtime=0):
????????
#raise?exceptions?if?input?is?invalidate
????????if?len(name)?>?8:
????????????
raise?InvalidName,?"Error:?Name?too?long!"
????????
if?basesalary?<?0?or?basesalary?>?300000:
????????????
raise?InvalidInput,?"Error:?Base?salary?should?between?0~300000!"
????????
#use?int(overtime)?!=?overtime?to?check?if?the?input?is?int
????????if?overtime?<?0?or?overtime??>?31?or?int(overtime)?!=?overtime:
????????????
raise?InvalidInput,?"Error:?Overtime?should?between?0~31!"
????????EmployeeBase.
__init__(self,name,basesalary,overtime)
ps:異常類型后面的文字是為了給,異常處理提供信息用的。

OK,第一步順利完成,下面就是經(jīng)理類。經(jīng)理的工資由加班工資和績效組成,加班工資只跟經(jīng)理的等級有關(guān),它與績效工資都是一個固定值,基本上沒有什么難度。





posted on 2010-04-23 16:30 Sunshine Alike 閱讀(1198) 評論(0)  編輯 收藏 引用 所屬分類: Python

只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲精品久久久久久久久久久久久 | 亚洲女人小视频在线观看| 久久精品国产清高在天天线| 亚洲欧美国产高清| 亚洲欧美日本精品| 午夜精品久久久久| 久久久久综合| 欧美福利影院| 9l视频自拍蝌蚪9l视频成人| 亚洲网站在线观看| 欧美在线免费| 免费短视频成人日韩| 欧美日韩999| 国产精品久久中文| 国内偷自视频区视频综合| 1024欧美极品| 一片黄亚洲嫩模| 久久av一区| 亚洲国产成人av| 亚洲欧洲在线一区| 午夜精彩国产免费不卡不顿大片| 久久精品成人| 欧美日韩激情小视频| 国产午夜亚洲精品理论片色戒| 一区二区亚洲精品国产| 99精品国产在热久久| 久久国产精品免费一区| 亚洲国产成人精品久久| 亚洲专区欧美专区| 欧美成人中文| 黑人一区二区三区四区五区| 夜夜嗨av一区二区三区中文字幕 | 猛男gaygay欧美视频| 99精品国产一区二区青青牛奶 | 欧美高清视频www夜色资源网| 国产精品国产三级国产普通话99| 一色屋精品亚洲香蕉网站| 在线一区二区三区做爰视频网站 | 国产精品成人观看视频国产奇米| 狠狠色丁香婷综合久久| 亚洲欧美精品| 亚洲欧洲一区二区在线播放| 久久精品久久99精品久久| 久久尤物电影视频在线观看| 国产精品theporn| 激情综合网址| 亚洲欧美国产毛片在线| 亚洲经典三级| 久久天堂成人| 国内揄拍国内精品久久| 亚洲欧美日韩精品在线| 亚洲人精品午夜| 猛干欧美女孩| 在线观看一区| 久久免费精品视频| 午夜宅男欧美| 国产精品一区二区在线观看不卡| 一区二区三区成人| 亚洲人体一区| 欧美精品日日鲁夜夜添| 亚洲人妖在线| 亚洲激情在线激情| 免费美女久久99| 亚洲国产精品黑人久久久| 欧美成人午夜| 欧美成人国产| 一区二区三区免费观看| 亚洲精品国久久99热| 欧美日韩成人| 一本色道**综合亚洲精品蜜桃冫| 亚洲精品裸体| 国产精品乱码一区二区三区| 亚洲欧美国产va在线影院| 亚洲综合国产| 国产一区二区精品在线观看| 久久久999精品视频| 久久久国产一区二区三区| 在线精品国精品国产尤物884a| 欧美va天堂va视频va在线| 久久人人爽人人爽爽久久| 亚洲国产天堂久久国产91| 亚洲福利小视频| 欧美日韩精品免费观看视频| 亚洲男女自偷自拍图片另类| 午夜久久tv| 在线免费不卡视频| 亚洲久久成人| 国产欧美日韩中文字幕在线| 久久夜色精品国产欧美乱极品| 久色婷婷小香蕉久久| 这里只有精品视频在线| 午夜精品成人在线| 91久久精品国产91久久性色tv| 91久久在线观看| 国产伦精品一区二区三区高清 | 亚洲精品之草原avav久久| 国产精品成人一区| 久久久亚洲影院你懂的| 欧美大片免费观看| 午夜久久福利| 免费短视频成人日韩| 亚洲欧美日本国产有色| 免费成人网www| 午夜伦欧美伦电影理论片| 欧美一区二区三区在线免费观看| 久久琪琪电影院| 欧美日韩精品二区第二页| 久久久之久亚州精品露出| 欧美日韩不卡视频| 欧美aaa级| 国产精品久久久久77777| 免费成人小视频| 国产精品久久毛片a| 亚洲国产成人tv| 国产亚洲二区| 一区二区免费在线视频| 亚洲国产视频直播| 久久精品国产第一区二区三区最新章节| 亚洲人成网站在线播| 性欧美大战久久久久久久免费观看| 亚洲久久成人| 久久久欧美精品sm网站| 欧美一级夜夜爽| 嫩模写真一区二区三区三州| 久久精品网址| 国产亚洲一级高清| 亚洲影院色在线观看免费| 99亚洲精品| 欧美日本不卡高清| 亚洲精品一区二区在线| 亚洲观看高清完整版在线观看| 欧美中文字幕在线| 久久国内精品视频| 国产精品羞羞答答xxdd| 一本一本久久| 亚洲在线免费| 欧美三级日本三级少妇99| 日韩午夜免费| 亚洲午夜一二三区视频| 欧美人与性动交cc0o| 亚洲美女黄网| 亚洲一区国产| 欧美系列亚洲系列| 亚洲永久在线观看| 久久久成人精品| 精品69视频一区二区三区| 久久精品免费电影| 女人天堂亚洲aⅴ在线观看| 亚洲成色www8888| 免费看av成人| 一区二区三区欧美成人| 午夜日韩在线| 国语自产精品视频在线看一大j8| 久久精品成人| 亚洲人被黑人高潮完整版| 在线视频精品一区| 国产女主播视频一区二区| 久久精品一区二区| 亚洲电影免费| 欧美亚洲综合在线| 在线色欧美三级视频| 欧美日韩黄视频| 久久高清免费观看| 亚洲欧洲一区二区三区在线观看| 香蕉久久a毛片| 在线免费高清一区二区三区| 欧美极品一区| 亚洲在线网站| 亚洲国产电影| 欧美在线观看视频| 亚洲激情视频在线| 国产精品户外野外| 欧美在线视频一区二区三区| 亚洲国产mv| 亚欧美中日韩视频| 国产综合久久久久久鬼色| 久久在线免费观看| 99国产精品视频免费观看一公开| 久久成人免费电影| 亚洲精品免费一区二区三区| 欧美性开放视频| 久久在线视频在线| 一本久久综合| 麻豆久久婷婷| 午夜精品在线看| 亚洲乱码精品一二三四区日韩在线 | 亚洲欧美日韩一区二区三区在线观看 | 亚洲欧美精品一区| 亚洲国产成人午夜在线一区| 国产精品第一区| 嫩草国产精品入口| 久久国产精品99国产| 99re6这里只有精品视频在线观看| 久久久久久黄| 亚洲欧美日韩国产一区二区三区 | 亚洲欧洲日韩在线| 国产午夜精品视频| 国产精品家庭影院| 欧美日韩综合在线| 欧美片网站免费|