类属性和类方法 面向对象五大块:类属性、实例属性、类方法、实例方法、静态方法 通过 类名.的方式可以 访问类的属性 或者 调用类的方法 一、.类属性 (1)定义类属性:使用赋值语句 (2)属性的获取机制:向上查找机制 a.首先在对象内部查找对象属性 b.没有找到就会向上寻找类属性 (3)访问类属性有两种方式:类名.类属性 / 对象.类属性 (不推荐) 注!!!:对象.类属性 = 值 赋值语句,只会 给对象添加一个属性,而不会影响到 类属性的值 二、类方法和静态方法 (一)类方法 1.语法格式:@classmethod def 类方法名(cls): pass 2.调用方法: · 通过 类名. 调用 类方法,调用方法时,不需要传递 cls 参数(也可将对象作为参数调用,输出对象属性) · 在方法内部 o 可以通过 cls. 访问类的属性 o 也可以通过 cls. 调用其他的类方法 (二)静态方法 1.语法格式:@staticmethod def 静态方法名(): pass 2.调用:通过 类名. 调用 静态方法 注:(1)通过类名.调用静态方法,不需要创建对象,但创建对象,对象调用也是可以的 (2)静态方法虽然是不需要 访问 实例属性/类属性 或者调用 实例方法/类方法,但是它是可以 访问 实例属性/类属性 或者调用 **实例方法/类方法 !!!
(1)类属性、实例方法、类方法、静态方法都存在类空间下,实例属性存在实例对象空间内 (2)在类空间下的方法和属性都可用“类名.”来调用,但是针对实例方法的调用最好用“对象.”调用 属性方法的选取实例方法 ——方法内部需要访问 实例属性 · 实例方法 内部可以使用 类名. 访问类属性 · 类方法** —— 方法内部只 需要访问 类属性 · 静态方法 —— 方法内部,不需要访问实例属性 和 类属性 · 即需要访问 实例属性,又需要访问 类属性 :实例方法
加上一个方法的简单综合案例 # 设计一个 Game 类
# 属性:
# 定义一个 类属性 top_score 记录游戏的 历史最高分
# 定义一个 实例属性 player_name 记录 当前游戏的玩家姓名
# 方法:
# 静态方法 show_help 显示游戏帮助信息
# 类方法 show_top_score 显示历史最高分
# 实例方法 start_game 开始当前玩家的游戏
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_game(self):
print("[%s] 开始游戏" % self.player_name)
Game.top_score = 999
# 1.查看游戏的帮助信息
Game.show_help()
# 2.查看历史最高分
Game.show_top_score()
# 3.创建游戏对象
game = Game("韩梅梅")
game.start_game()
Game.start_game(game)
Game.show_top_score()
|