1. 程式人生 > >類與對象1

類與對象1

類的屬性 績效 新增 復制代碼 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