# 创建的对象叫做类的实例
# 创建对象的动作叫做实例方法
# 对象的属性叫做实例属性
# 类属性和实例属性
# 类属性:类对象中定义的属性
# 类属性通常记录这个类的相关特征
# 类属性不会记录具体对象的特征
class Tool(object):
count = 0 # 记录工具类的数量(类属性的定义)
def __init__(self,name):
self.name = name
Tool.count += 1 # 调用类属性格式:类名.属性名
@classmethod # 声明一个类方法
def show_tool_count(cls): # 类方法里面是cls
print("工具对象的数量 %d " % cls.count) #用cls可以直接调用类中的类变量
tool1 = Tool("斧头")
tool2 = Tool("榔头")
tool3 = Tool("锯子")
print(Tool.count) # (调用类属性)
# 调用类方法:
Tool.show_tool_count()
# 静态方法
# 该方法不需要访问实例属性,或者调用实例方法,也不需要类属性或者调用类方法
# 在括号里不需要添加 self (实例方法)或者 cls (类方法)
class Dog(object):
@staticmethod
def run():
print("小狗赶紧跑.....")
# 通过类名.静态方法的方式调用--- 不需要创建对象
Dog.run()
运行结果:
3
工具对象的数量 3
小狗赶紧跑.....
综合案例:
# 案例:
# 属性1: 类属性 top_score :历史最高分(跟类有关,与每次的玩家无关)
# 属性2:实例属性 player_name 记录当前的游戏玩家姓名
# 方法1:show_help :显示游戏的帮助信息
# 方法2:show_top_score :显示历史最高分
# 方法3:start_game :开始当前玩家的游戏
# 主程序的步骤:
# 1.查看帮助信息
# 2.查看历史最高分
# 3.创建游戏对象,开始游戏
class Game(object):
# 历史最高分
top_score = 0
def __init__(self,player_name):
self.player_name = player_name
@staticmethod #静态方法
def show_help():
print("帮助信息,让僵尸进入大门")
@classmethod #类方法
def show_top_score(cls):
print("历史记录 %d" % cls.top_score)
def start_gane(self): # 实例方法
print("%s 开始游戏... " % self.player_name)
# 1.查看游戏的帮助信息,调用静态方法
Game.show_help()
# 2,.查看历史最高分,调用类方法
Game.show_top_score()
# 3.创建游戏对象,调用实例方法
game = Game("小明")
game.start_gane()
运行结果:
帮助信息,让僵尸进入大门
历史记录 0
小明 开始游戏...