黑马程序员技术交流社区
标题: 绕人的类的属性和方法 [打印本页]
作者: 子沫999 时间: 2018-8-1 23:26
标题: 绕人的类的属性和方法
类属性和类方法 面向对象五大块:类属性、实例属性、类方法、实例方法、静态方法
通过 类名.的方式可以 访问类的属性 或者 调用类的方法
一、.类属性
(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()
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |