一 类方法
1 什么是类方法?
供类自己调用的方法,访问类属性一般需要此方法。
2 怎么针对类对象定义一个类方法
@classmethod
def 类方法名(cls):
pass
类方法需要修饰器
来标识, 告诉解释器这是一个类方法
类方法的第一个参数应该是cls,
由哪一个类调用的方法,方法内的cls就是哪一个类的引用
这个参数和实例方法的第一个参数与slef类似
提示使用其他名称也可以,不过习惯使用cls
通过类名,调用类方法,调用方法时,不需要传递cls参数
在方法内部
可以通过cls,访问类的属性
也可以通过cls,调用其他的类方法
3 代码结构
#!usr/bin/python
class Tool(object):
#count = 0赋值语句定义类属性
count = 0
#cls标识符定义类方法
@classmethod
def show_tool_count(cls):
print("工具数量是 %d" %cls.count)
def __init__(self,name):
self.name = name
Tool.count +=1
tool1 = Tool("fuzi")
tool2 = Tool("juzi")
Tool.show_tool_count()
>>>工具数量是 2
二静态方法
1 什么是静态方法
在开发时,如果需要在类中封装一个方法,这个方法:
既不需要访问实例属性或者实例方法,
也不需要访问类属性或者类方法
这个时候就可以把这个方法封装成一个静态方法。
语法如下:
@staticmethod
def 静态方法名():
pass
三 实例方法
实例方法就是调用封装在类中的属性的和方法,带self形参的。
四 综合案例需求
需求:
1 设计一个Game类
2 属性:
定义一个类属性 top_score记录游戏的历史最高分
定义一个实例属性play_name 记录当前游戏的玩家姓名
3 方法
静态方法show_help显示游戏帮助信息
类方法show_top_score显示历史最高分
实例方法start_game开始当前玩家的游戏
4 主程序步骤
1)查看帮助信息
2)查看历史最高分
3)创建游戏对象,开始游戏
代码实现:
#!usr/bin/python
class Game():
#静态方法
@staticmethod
def show_help():
print("帮助信息:植物大战僵尸")
#类方法
count = 0
@classmethod
def show_top_score(cls):
print("历史最高分是 %d" %cls.count)
#实例方法
#属性(玩家姓名)+游戏方法
def __init__(self,name):
self.name = name
def play_game(self):
print("%s 进入了游戏" %self.name)
xiaoming = Game("小明")
Game.show_help()
Game.show_top_score()
xiaoming.play_game()
帮助信息:植物大战僵尸
历史最高分是 0
小明 进入了游戏