【类】是一个函数包。类中可以放置函数和变量,然后类中的函数可以很方便的使用类中的变量
1、类的定义
2、类中方法的调用
在类中被定义的函数被称为类的【方法】,描述的是这个类能做什么。我们使用类名.函数名()
的格式,就可以让类的方法运行起来。
3、类中变量的调用
在类中被定义的变量被称为类的【属性】。使用类名.变量名
的格式,可以把类中的属性的值提取出来
4、类中变量新增和修改
有两种途径来修改或者新增类属性
第一种方法 从内部,用类方法去修改或者新增,另一种从外部,用类.变量名=xx,直接新增或者修改类属性
1)从外部增加/修改属性
类A()
是一个空类(里面的pass语句代表“什么都不做”),利用类A.变量1
,我们在外部给类A()
添加了一个类属性变量1
,然后使用print语句把类属性打印了出来。
案例2:
先利用input函数从外部接收了一个字符串,并通过赋值的方式保存为了类属性类.变量。然后利用类方法类.打印类属性()打印出了这个外部输入的字符串。
2)从内部增加/修改属性
类.增加并打印类属性()
接收外部输入的字符串,然后新增为类属性。
5、类的使用举例
6、类变量和类方法
① 第一个格式@classmethod
的中文意思就是“类方法”,@classmethod
声明了函数1
是类方法,这样才能允许函数1
使用类属性中的数据。
② 第二个格式cls
的意思是class
的缩写。如果类方法函数1
想使用类属性(也就是类中的变量),就要写上cls
为函数1
的第一个参数,也就是把这个类作为参数传给自己,这样就能被允许使用类中的数据。
③ 第三个格式是cls.变量
。类方法想使用类属性的时候,需要在这些变量名称前加上cls.
。
另外,当类中的函数【不需要】用到类中的变量时,就不要用@classmethod
、cls
、cls.
三处格式,否则就是占着茅坑不拉屎,终端也会给你报错。(没错,就是这么傲娇~)
正确的案例
7、类方法同时使用内部参数和外部参数
8、类方法调用其他类方法
综合题目练习
1、录入员工信息,如果姓名不正确给出提示
2、打印学生信息
3、根据员工的kpi给出评绩
# 创建一个人事系统类
class hrSystem:
# 创建存储员工名字的变量 name
name = ''
# 创建存储员工工资的变量 salary
salary = 0
# 创建存储员工绩效的变量 kpi
kpi = 0
# 定义录入员工信息的类方法
@classmethod
def record(cls, name, salary, kpi):
cls.name = name
cls.salary = salary
cls.kpi = kpi
# 定义打印员工信息的类方法
@classmethod
def print_record(cls):
if cls.check_name(): # 以 cls.check_name() 的返回值(0或1)作为判断条件。
print(cls.name + '的工作信息如下:')
print('本月工资:' + str(cls.salary))
print('本年绩效:' + str(cls.kpi))
# 定义根据 kpi 评奖的类方法
@classmethod
def kpi_reward(cls):
if cls.kpi > 95:
print('恭喜' + cls.name + '拿到明星员工奖杯!')
elif cls.kpi <= 95 and cls.kpi >= 80:
print('恭喜' + cls.name + '拿到优秀员工奖杯!')
else:
print('很遗憾' + cls.name + '这次没有评上奖杯,希望来年努力工作,勇创佳绩!')
# 检查录入名称是否正确的类方法
@classmethod
def check_name(cls):
if cls.name not in ['bob', 'candy', 'jony', 'kelly']:
print('录入错误!' + cls.name + '不是本公司员工!')
return 0 # 设置返回值为0
else:
print('录入正确~')
return 1 # 设置返回值为1
# 验证结果的代码
hrSystem.record('spy', 3000, 60)
hrSystem.print_record()