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

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>
            激情另类综合| 国产精品欧美一区二区三区奶水| 亚洲专区免费| 精品91视频| 国产精品乱码一区二区三区| 午夜精品久久久久久久99水蜜桃 | 久久久亚洲高清| 日韩亚洲精品电影| 免费在线观看精品| 国产伦精品一区二区三| 亚洲伦伦在线| 久久精品网址| 欧美一区成人| 91久久精品美女高潮| 午夜国产欧美理论在线播放| 久久久久久成人| 国产精品社区| 欧美日韩一区二区欧美激情| 亚洲一区二区黄色| 美女图片一区二区| 亚洲一区二区免费| 久久另类ts人妖一区二区| 国产精品久久久久久久第一福利| 久久婷婷一区| 亚洲精品久久久久久久久久久久| 久久久亚洲高清| 欧美在线欧美在线| 欧美性事免费在线观看| 中文一区二区| 亚洲女同精品视频| 欧美激情2020午夜免费观看| 日韩写真视频在线观看| 午夜精品在线看| 欧美亚洲在线观看| 欧美一区成人| 国产精品尤物福利片在线观看| 欧美视频一区二区三区| 老**午夜毛片一区二区三区| 麻豆精品精品国产自在97香蕉| 亚洲在线视频网站| 欧美黑人国产人伦爽爽爽| 亚洲午夜一级| 亚洲一区二区三区在线| 国产精品第十页| 欧美视频手机在线| 国产精品一区二区女厕厕| 蜜桃久久精品一区二区| 欧美视频在线观看免费| 欧美成人第一页| 国产精品私拍pans大尺度在线| 久久精品视频免费| 久久人人精品| 亚洲黄色影院| 激情国产一区二区| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ入口 | 亚洲欧洲精品一区二区三区| 亚洲欧洲日韩在线| 欧美一区二区三区成人| 久久久久99| 欧美日韩国产系列| 亚洲第一级黄色片| 欧美一区二区三区喷汁尤物| 亚洲精品永久免费| 欧美精品福利| 一本色道久久综合一区| 91久久精品国产91性色| 麻豆精品在线视频| 亚洲激情视频在线播放| 欧美福利电影网| 免费看亚洲片| 中文在线资源观看视频网站免费不卡| 麻豆国产va免费精品高清在线| 亚洲电影在线免费观看| 91久久极品少妇xxxxⅹ软件| 欧美人成在线| 西西裸体人体做爰大胆久久久| 亚洲一区综合| 很黄很黄激情成人| 欧美电影免费观看高清| 欧美日韩国产三区| 久久本道综合色狠狠五月| 久久gogo国模裸体人体| 亚洲欧洲精品一区二区精品久久久| 亚洲欧洲午夜| 国产美女精品人人做人人爽| 久久久国产精彩视频美女艺术照福利 | 久久久久女教师免费一区| 黄色成人在线| 香蕉久久夜色精品国产| 欧美午夜不卡影院在线观看完整版免费| 久久久青草青青国产亚洲免观| 亚洲欧美日韩精品| 99精品热视频| 亚洲淫性视频| 欧美视频中文字幕在线| 欧美主播一区二区三区美女 久久精品人| 欧美在线观看你懂的| 亚洲精品欧美专区| 欧美mv日韩mv亚洲| 久久久天天操| 久久久噜噜噜久久中文字免| 韩国欧美一区| 先锋影音一区二区三区| 激情成人在线视频| aa亚洲婷婷| 亚洲大胆人体视频| 亚洲图片欧洲图片日韩av| 在线播放中文一区| 中文av字幕一区| 亚洲福利在线看| 亚洲综合999| 亚洲精品字幕| 欧美专区在线| 亚洲小视频在线观看| 久久深夜福利| 久久精品国产99国产精品| 欧美福利专区| 久久深夜福利免费观看| 国产精品福利在线观看| 亚洲成人中文| 极品av少妇一区二区| 一区二区三区高清视频在线观看| 玉米视频成人免费看| 欧美怡红院视频| 香蕉久久夜色精品| 欧美日韩色婷婷| 欧美国产先锋| 黄色综合网站| 欧美亚洲一区二区在线| 亚洲尤物在线| 国产精品草草| 一区二区高清视频在线观看| 亚洲精品网址在线观看| 免费看成人av| 91久久精品美女| 99re国产精品| 欧美美女bbbb| 一本久道久久综合中文字幕 | 欧美一级理论片| 香蕉成人伊视频在线观看 | 久久国产日本精品| 亚洲精品视频在线播放| 男女视频一区二区| 国产精品乱码一区二三区小蝌蚪| 亚洲图片欧美午夜| 亚洲美女黄色| 亚洲天堂免费观看| 久久久久久91香蕉国产| 欧美激情a∨在线视频播放| 久久精品综合一区| 尤物九九久久国产精品的分类| 欧美一区二区视频观看视频| 久久国产婷婷国产香蕉| 国产一区二区三区最好精华液| 久久国产福利| 亚洲福利免费| 一区二区三区精密机械公司| 欧美日韩亚洲视频| 亚洲欧美制服中文字幕| 久久手机免费观看| 91久久久久久| 国产精品草草| 久久免费视频一区| 亚洲精品在线观看视频| 午夜在线一区| 亚洲区国产区| 国产精品美女久久久久久2018| 欧美一区二区啪啪| 亚洲国产你懂的| 欧美一级大片在线观看| 亚洲成人在线视频播放| 欧美三级欧美一级| 久久精品国产欧美亚洲人人爽| 亚洲国产成人精品女人久久久| 亚洲一级黄色片| 在线观看一区欧美| 国产精品裸体一区二区三区| 久久久久免费视频| 亚洲一区网站| 亚洲第一精品福利| 欧美一区二区三区精品| 亚洲国产色一区| 国产日韩精品一区二区| 欧美激情一区二区| 久久国产精品久久久| 一区二区高清视频| 亚洲国产精品电影在线观看| 久久er精品视频| 亚洲视频播放| 亚洲国产精品久久久久婷婷老年| 国产精品theporn| 欧美国产日韩精品| 久久久久久免费| 亚洲欧美在线视频观看| 一本久道久久综合中文字幕| 国内精品伊人久久久久av一坑| 亚洲欧美日韩在线不卡| 欧美精品七区| 久久久视频精品| 亚洲欧美自拍偷拍|