【类】是一个函数包。类中可以放置函数和变量,类中的函数可以很方便的使用类中的变量。
在类中被定义的函数被称为类的【方法】,描述的是这个类能做什么。我们使用类名.函数名()的格式,就可以让类的方法运行起来。在类中被定义的变量被称为类的【属性】。使用类名.变量名的格式,可以把类中的属性的值提取出来。类的属性可以修改,使用类名.变量名的格式,可以让我们在类的外面,增加或修改类的属性。
类方法和类属性可以组合,需要用到@classmethod,中文意思是类方法。
class 类A():
变量1 = 100
变量2 = 200
@classmethod
def 函数1(cls):
print(cls.变量1)
print(cls.变量2)
类A.函数1()
为了把类中的变量传递给类中的函数,我们需要用到3个特定格式:
① 第一个格式@classmethod的中文意思就是“类方法”,@classmethod声明了函数1是类方法,这样才能允许函数1使用类属性中的数据。
② 第二个格式cls的意思是class的缩写。如果类方法函数1想使用类属性(也就是类中的变量),就要写上cls为函数1的第一个参数,也就是把这个类作为参数传给自己,这样就能被允许使用类中的数据。
③ 第三个格式是cls.变量。类方法想使用类属性的时候,需要在这些变量名称前加上cls
从【类的外部】增加/修改类属性
class 幸运():
@classmethod
def 好运翻倍(cls):
print('好的,我把它存了起来,然后翻了888倍还给你:' + str(cls.幸运数*888))
# 或者这样写也可以:
# print('好的,我把它存了起来,然后翻了888倍还给你:%d' % (cls.幸运数*888))
幸运.幸运数 = int(input('你的幸运数是多少?请输入一个整数。'))
幸运.好运翻倍()
从类的内部增加/修改类属性
class 念诗类():
一首诗 = ['《卜算子》','我住长江头,','君住长江尾。','日日思君不见君,','共饮长江水。']
@classmethod
def 念诗函数(cls):
cls.姓名 = input('请输入你想给谁念诗:')
print("念给"+cls.姓名+'的诗')
for i in cls.一首诗:
print(i)
念诗类.念诗函数()
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()
练习
class calendar:
date = '2020-08-08'
things = {'给父母买礼物':'9:00', '学习':'10:00', '和朋友聚会':'18:30'}
@classmethod
def thing_done(cls, thing):#已完成的事情删除
del cls.things[thing]
@classmethod
def add_thing(cls, thing, time):#增加将做事项
cls.things[thing] = time
calendar.thing_done('给父母买礼物')
calendar.add_thing('写日记', '20:00')
print(calendar.things)