类与对象1

类是一个函数包,类中可以放置函数和变量。就像用 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/

 

 

 

posted @ 2019-04-08 16:03  JonesLin  阅读(361)  评论(0编辑  收藏  举报