涓婃墜闈炲父綆鍗曪紝鏈夎繃涓瀹氱紪紼嬬粡楠岀殑浜哄ぇ綰﹀彲浠ュ湪鍑犱釜灝忔椂涔嬪唴鎺屾彙鍩烘湰鐨凱ython緙栫▼鏂規硶銆?br />姝eソ鍦ㄥ涔犺璁℃ā寮忚紼嬶紝浼氭湁鍑犳璇劇▼浣滀笟錛屽氨鐩存帴鎷胯繃鏉ユ潈褰揚ython鐨勪竴嬈$紪紼嬬粌涔犱簡
絎竴嬈′換鍔$畝浠嬶細
瀹炵幇涓涓鐞嗛泧鍛樿柂姘寸殑宸ュ叿錛屽彲浠ユ墦鍗板嚭鍛樺伐鐨勮柂姘翠俊鎭?br />闆囧憳鍒嗕負鏅氬拰緇忕悊錛屽悇鑷湁涓嶅悓鐨勮柂姘磋綆楁柟娉曘?br />
Ok錛孡et's go錛?br />棣栧厛澶嶄範涓涓婸ython閲岀殑闈㈠悜瀵硅薄鐩稿叧鐭ヨ瘑錛屽畾涔変竴涓泧鍛樼殑鍩虹被EmployeeBase
騫朵笖鍦╛_init__鏂規硶閲屽畾涔変簡涓変釜鎴愬憳name, base_salary鍜宱vertime_days
闇瑕佹敞鎰忕殑灝辨槸鎵鏈夌殑綾繪垚鍛樻柟娉曞湪澹版槑鐨勬椂鍊欓兘闇瑕佹湁涓涓粯璁ょ殑鍙傛暟self錛岃繖涓浉褰撲簬this鎸囬拡鐨勪笢瑗垮繀欏昏鍐欎笂錛岃屼笖璁塊棶綾繪垚鍛樻垨鑰呮柟娉曚篃閮借鍔犱笂榪欎釜鍓嶇紑錛屼笉鐒朵細鍑洪敊銆?br />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錛岀戶鎵跨殑璇硶錛?span style="color: rgb(0, 0, 0);">Employee(EmployeeBase)
浠ュ強綾葷殑__doc__錛屽吇鎴愬啓娉ㄩ噴鐨勪範鎯?br /> Line 6錛?br />__init__騫朵笉鏄瀯閫犲嚱鏁幫紝騫朵笖Python閲屼篃娌℃湁鏋勯犲嚱鏁拌繖涓蹇點傛墍浠ヨ鎵嬪姩鐨勮皟鐢ㄥ熀綾葷殑__init__鏂規硶
GetSalary涓綆楄柂姘達紝鏅氶泧鍛樼殑鍔犵彮宸ヨ祫鏄弻鍊嶈綆楃殑銆?br />
聽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())
鍒拌繖閲岋紝闆囧憳綾誨凡緇忓畬鎴愶紝涓嬮潰灝辨槸鈥斺?b>鍗曞厓嫻嬭瘯銆備竴鑸垜浠ュ墠鍐欑▼搴忛兘寰堝皯鍐欏崟鍏冩祴璇曠殑錛屽洜涓哄緢璐規椂錛岃鍐欏緢澶氭祴璇曠殑浠g爜銆?br />浣嗘槸榪欓噷鎴戞兂鐗瑰埆灝濊瘯涓涓嬶紝浠ュ睍鐜癙ython閲岀殑鍚勭鐗規у拰宸ュ叿銆?br />鏂扮増鏈殑Python閲屾湁涓涓笓闂ㄧ敤浜庢祴璇曠殑unittest妯″潡錛屽鍏ュ氨鍙互浣跨敤浜嗭紝涓嬮潰鏂板緩涓涓猅estsalary.py榪涜鍗曞厓嫻嬭瘯銆?br />棣栧厛unittest妯″潡閲屾湁涓涓祴璇曠敤渚嬬殑鍩虹被TestCase錛屾垜浠彧瑕佸湪TestCase鐨勬淳鐢熺被閲屽畾涔夎嚜宸辯殑嫻嬭瘯鐢ㄤ緥鏂規硶灝卞彲浠ヤ嬌鐢ㄤ簡錛岃繖浜涙祴璇曠敤鍛芥柟娉曠敋鑷抽兘涓嶉渶瑕佽嚜宸辮皟鐢紝鍙鏂規硶鍚嶅瓧浠est寮澶?/b>錛孴estCase灝變細鑷姩鐨勮皟鐢ㄥ畠浠?br />鍦ㄤ笅闈㈢殑嫻嬭瘯浠g爜涓紝鎴戝畾涔変簡testNoneEmployee絳夊嚑涓祴璇曟柟娉曪紝涓昏鏄嬌鐢ㄤ簡TestCase閲岀殑assertEqual鏂規硶銆?br />"""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()
榪愯涔嬶紝鍑虹幇緇撴灉錛?br />----------------------------------------------------------------------
Ran 5 tests聽in聽0.007s
OK
鍏ㄩ儴閫氳繃錛屽お娌℃剰鎬濅簡錛屾兂鐫瑕佸姞鐐逛粈涔堝ソ鍛€備笅闈㈡垜瀵規瀯閫燛mployee鐨勬椂鍊欏姞涓婂弬鏁扮殑媯鏌ワ紝涓嶅厑璁鎬笉姝g‘鐨勫弬鏁拌緭鍏ワ紝渚嬪鍚嶅瓧澶暱錛屽伐璧勫拰鍔犵彮澶╂暟涓鴻礋鏁扮瓑銆傛垜甯屾湜鍦ㄨ瘯鍥劇敤榪欎簺涓嶆紜殑鍙傛暟榪涜鍒涘緩Employee瀵硅薄鐨勬椂鍊欏嚭鐜板紓甯搞?br />鍦ㄦ祴璇曚唬鐮佷腑鍔犲叆鍙︿袱涓柟娉曪紝浣跨敤浜員estCase閲岀殑鍙︿竴涓柟娉?b>assertRaises錛岃繖涓柟娉曞彲浠ユ嫻嬭嫻嬪璞℃槸鍚︽寜鎶涘嚭浜嗛鏈熺殑寮傚父銆傝繖涓柟娉曟帴鍙椾竴涓紓甯哥被鍨嬶紝鍜屼竴涓細浜х敓榪欑寮傚父鐨勨滃璞♀濓紝閫氬父鏄竴涓嚱鏁幫紝浠ュ強瀹冧滑鐨勫弬鏁?br />聽聽聽聽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)
涓ょ寮傚父綾葷殑鍚嶅瓧鍒嗗埆鍙獻nvalidName鍜孖nvalidInput錛岃繖涓嬫祴璇曢氫笉榪囦簡銆備笅闈㈠氨闇瑕佷慨鏀笶mployee綾伙紝棣栧厛鎻愪竴涓婸ython閲岀殑寮傚父澶勭悊錛屼嬌鐢╰ry...except...澶勭悊寮傚父錛宺aise鎶涘嚭寮傚父錛宖inally鍙互鐢ㄦ潵鍋氫竴浜涘杽鍚庡鐞嗗伐浣溿?br />涓嬮潰鍏堣瀹氫箟涓婇潰鐢ㄥ埌鐨勮繖涓ょ寮傚父錛孖nvalidName鍜孖nvalidInput錛岃繖閲岀畝鍗曠殑緇ф壙涓涓婸ython閲岀殑Exception綾誨氨鍙互浜嗭紝鐒跺悗淇敼Employee鐨刜_init__鏂規硶錛岃繘琛屽弬鏁扮殑鏌ユ錛屼慨姝e悗濡備笅錛?br />#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錛氬紓甯哥被鍨嬪悗闈㈢殑鏂囧瓧鏄負浜嗙粰錛屽紓甯稿鐞嗘彁渚涗俊鎭敤鐨勩?br />
OK錛岀涓姝ラ『鍒╁畬鎴愶紝涓嬮潰灝辨槸緇忕悊綾匯傜粡鐞嗙殑宸ヨ祫鐢卞姞鐝伐璧勫拰緇╂晥緇勬垚錛屽姞鐝伐璧勫彧璺熺粡鐞嗙殑絳夌駭鏈夊叧錛屽畠涓庣嘩鏁堝伐璧勯兘鏄竴涓浐瀹氬鹼紝鍩烘湰涓婃病鏈変粈涔堥毦搴︺?br />

]]>