一、类方法
1.1 概念和语法说明
类方法就是针对类对象定义的方法。在类方法内部可以直接访问类属性或者调用其他的类方法
语法如下:
@classmethod def 类方法名(cls): pass
说明:
类方法需要修饰器 @classmethod 来标识,告诉解释器这是一个类方法。
类方法第一个参数应是cls(class的缩写),参数也可以使用其他名称,不过习惯使用cls,作用与self类似,
在方法内部可以使用 cls. 访问类的属性以及其他的类方法。
1.2 代码演示
class Tool(object): count = 0 @classmethod def show_count(cls): print(F"工具对象的数量:{cls.count}") def __init__(self, name): self.name = name # 通过 类名.类属性 的方式访问类属性; # 也可以通过 对象.类属性 的方式访问,但是一般不建议这么做。因为如果调用前使用了赋值语句结果会变更 Tool.count += 1 # 创建工具对象 tool1 = Tool("钳子") tool2 = Tool("扳手") tool3 = Tool("改刀") # 调用类方法 Tool.show_count()
二、静态方法
2.1 概念和语法说明
在开发中,如果需要在类中封装一个方法,而这个方法既不需要访问实例属性或者调用实例方法,也不需要访问类属性或者调用类方法,这个时候就可以把这个方法封装成一个静态方法。
语法如下:
@staticmethod def 静态方法名(): pass
说明:
静态方法需要使用修饰器 @staticmethod 来标识,告诉解释器这是一个静态方法。
静态方法不需要使用self 或 cls
可以通过 类名.静态方法名 的方式调用静态方法
2.2 代码演示
class Person(object): @staticmethod def eat(): print("喜欢吃") Person.eat()
三、案例演练
3.1 案例需求
开发一个小游戏,需要为游戏增加游戏说明,游戏会展示游戏最高分和玩家姓名。
分析:
游戏说明与游戏本身没有任何关系,只是对游戏起到一个说明的功能,因此采用静态方法。
游戏分数为游戏的属性,不是玩家的属性,因此采用类方法。
玩家姓名是游戏操作对象的属性,因此采用实例方法。
3.2 代码演示
import random class Game(object): # 创建类属性 top_score = 0 top_score_player = "" # 创建静态方法 @staticmethod def game_help(): print("这个游戏应该这样玩...") # 创建类方法 @classmethod def show_top_score(cls): print(F"玩家:{cls.top_score_player} 获得游戏最高分 {cls.top_score} 分!") # 创建实例属性 def __init__(self, player_name): self.player_name = player_name # 创建实例方法 def play_game(self): print(F"玩家:{self.player_name},正在玩游戏...") score = random.randint(0, 100) print(F"游戏结束,得分:{score}") if score > Game.top_score: Game.top_score = score Game.top_score_player = self.player_name Game.game_help() zhangSan = Game("张三") zhangSan.play_game() liSi = Game("李四") liSi.play_game() Game.show_top_score()
输出结果:
这个游戏应该这样玩... 玩家:张三,正在玩游戏... 游戏结束,得分:70 玩家:李四,正在玩游戏... 游戏结束,得分:38 玩家:张三 获得游戏最高分 70 分!