類與對象1
阿新 • • 發佈:2019-04-08
類的屬性 績效 新增 復制代碼 tro int 接收 數位 用戶
類是一個函數包,類中可以放置函數和變量。就像用 def 語句定義函數一樣,用 class 語句來自定義一個類
1. 使用語法
在類中被定義的函數被稱為類的【方法】,描述的是這個類能做什麽。我們使用 Class.function() 的格式
在類中被定義的變量被稱為類的【屬性】,使用的 Class.var 格式
1 # 語法:創建一個名為“ClassName”的類,類名一般首字母要大寫,(): 不能丟 2 class ClassName(): 3 # 如定義一個名為‘狗‘的類,可以寫成class Dog(): 4 # 規範:class語句後續的代碼塊要縮進 5 def function1(): 6 print(‘報道!我是類A的第一個方法!‘) 7 # 定義類中的函數1 8 def function2(): 9 print(‘報道!我是類A的第二個方法!‘) 10 # 定義類中的函數2 11 var1 = 100 12 var2 = -5.83 13 var3 = ‘abc‘ 14 15 ClassName.function1() 16 ClassName.function1() 17 #調用函數1、函數2 18 19 print(ClassName.var1) 20 print(ClassName.var2) 21 print(ClassName.var3)
終端輸出:
報道!我是ClassName的第一個方法! 報道!我是ClassName的第二個方法!
也可在類的外面,使用 ClassName.var 的格式,增加或修改類的屬性:
1 class ClassName(): 2 var1 = 100 3 var2 = -5.83 4 var3 = ‘abc‘ 5 6 ClassName.var1 = 99 7 ClassName.var4 = ‘新增一個變量‘ 8 9 print(ClassName.var1) 10 print(ClassName.var4)
2. 類方法和類屬性的組合
為了把類中的變量傳遞給類中的函數,我們需要用到3個特定格式:
若類中的函數【不需要】用到類中的變量時,就不要用這三處格式,否則終端也會給你報錯。
3. 類方法同時使用內部參數和外部參數
(註意:當類方法同時使用多個外參數時,要多預設幾個參數位置)
1 # 請直接運行並體驗代碼效果 2 class Class(): 3 var = 100 4 5 @classmethod 6 def function(cls,num1,num2,num3): 7 sum = cls.var + num1 + num2 + num3 8 print(‘加100函數計算結果如下:‘) 9 print(sum) 10 11 num1 = int(input(‘請輸入一個整數:‘)) 12 num2 = int(input(‘請輸入一個整數:‘)) 13 num3 = int(input(‘請輸入一個整數:‘)) 14 15 Class.function(num1,num2,num3)
終端結果:
請輸入一個整數:1000 請輸入一個整數:2000 請輸入一個整數:3000 加100函數計算結果如下: 6100
再舉一個例子:
1 class poem(): 2 word = [‘《蔔算子》‘,‘我住長江頭,‘,‘君住長江尾。‘,‘日日思君不見君,‘,‘共飲長江水。‘] 3 4 @classmethod 5 def poem_function(cls,a): 6 print(‘念給‘+ a +‘的詩:‘) 7 for i in cls.word: 8 print(i) 9 10 poem.poem_function(‘張三‘)
終端輸出:
念給張三的詩:
《蔔算子》
我住長江頭,
君住長江尾。
日日思君不見君,
共飲長江水。
4. 如何增加/修改類屬性
4.1 從外部增加/修改屬性
例如:做一個“幸運數翻倍”小程序,這個程序能接收外部輸入的幸運數字,然後翻888倍打印出來。
1 class lunky(): 2 @classmethod 3 def fanbei(cls): 4 print(‘好的,我把它存了起來,然後翻了888倍還給你:‘ + str(cls.num*888)) 5 # 或者這樣寫也可以: 6 # print(‘好的,我把它存了起來,然後翻了888倍還給你:%d‘ % (cls.幸運數*888)) 7 8 lunky.num = int(input(‘你的幸運數是多少?請輸入一個整數。‘)) 9 lunky.fanbei()
終端輸出:
你的幸運數是多少?請輸入一個整數。66
好的,我把它存了起來,然後翻了888倍還給你:58608
4.2 從內部增加/修改屬性
格式如下:
1 class ClassName(): 2 @classmethod 3 def function(cls): 4 cls.var = input(‘請隨意輸入字符串:‘) 5 6 ClassName.function() 7 8 print(‘打印新增的類屬性:‘) 9 print(ClassName.var)
舉個例子:改良之前的例子,‘念給張三的詩‘
請輸入你想給誰念詩:(用戶輸入“Jones‘‘)
給Jones的詩
《蔔算子》 我住長江頭, 君住長江尾。 日日思君不見君, 共飲長江水。
1 class poem(): 2 word = [‘《蔔算子》‘,‘我住長江頭,‘,‘君住長江尾。‘,‘日日思君不見君,‘,‘共飲長江水。‘] 3 4 @classmethod 5 def poem_function(cls): 6 cls.name = input(‘請輸入你想給誰念詩:‘) 7 print(‘給{}的詩‘.format(cls.name)) 8 for i in cls.word: 9 print(i) 10 11 poem.poem_function()
終端輸出:
請輸入你想給誰念詩:Jones
念給Jones的詩:
《蔔算子》
我住長江頭,
君住長江尾。
日日思君不見君,
共飲長江水。
綜合例子:
1.
①是調用類方法評級
,②是在評級內部調用了類方法計算平均分
,③④是類方法計算平均分
的過程,最後返回的值重新賦值給了評級
中的類屬性平均分
。
2.員工管理系統
1 # 創建一個人事系統類 2 class hrSystem: 3 # 創建存儲員工名字的變量 name 4 name = ‘‘ 5 # 創建存儲員工工資的變量 salary 6 salary = 0 7 # 創建存儲員工績效的變量 kpi 8 kpi = 0 9 10 # 定義錄入員工信息的類方法 11 @classmethod 12 def record(cls, name, salary, kpi): 13 cls.name = name 14 cls.salary = salary 15 cls.kpi = kpi 16 17 # 定義打印員工信息的類方法 18 @classmethod 19 def print_record(cls): 20 if check_name(): 21 print(cls.name + ‘的工作信息如下:‘) 22 print(‘本月工資:‘ + str(cls.salary)) 23 print(‘本年績效:‘ + str(cls.kpi)) 24 25 # 定義根據 kpi 評獎的類方法 26 @classmethod 27 def kpi_reward(cls): 28 if cls.kpi > 95: 29 print(‘恭喜‘ + cls.name + ‘拿到明星員工獎杯!‘) 30 elif cls.kpi <= 95 and cls.kpi >= 80: 31 print(‘恭喜‘ + cls.name + ‘拿到優秀員工獎杯!‘) 32 else: 33 print(‘很遺憾‘ + cls.name + ‘這次沒有評上獎杯,希望來年努力工作,勇創佳績!‘) 34 35 # 請在下面填入你的代碼,大約4行左右 36 @classmethod 37 def check_name(cls): 38 if cls.name in [‘bob‘, ‘candy‘, ‘jony‘, ‘kelly‘]: 39 print(‘錄入正確!‘) 40 return 1 41 else: 42 print(‘錄入錯誤!‘ + cls.name +‘不是本公司員工!‘) 43 return 0 44 45 # 驗證結果的代碼 46 hrSystem.record(‘bob‘, 13000, 98) 47 hrSystem.print_record 48 hrSystem.check_name() 49 hrSystem.kpi_reward() 50 hrSystem.record(‘spy‘, 3000, 60) 51 hrSystem.check_name()
終端輸出:
錄入正確!
恭喜bob拿到明星員工獎杯!
錄入錯誤!spy不是本公司員工!
可以在codelf網站查詢英文取名:https://unbug.github.io/codelf/
類與對象1