一、 类的结构
1.1 术语 —— 实例
因此,通常也会把:
在程序执行时:
结论
1.2 类是一个特殊的对象
Python中 一切皆对象:
二、类属性和实例属性
2.1 概念和使用
示例需求
class Tool(object):
count = 0
def __init__(self, name):
self.name = name
Tool.count += 1
futou = Tool("斧头")
langtou = Tool("榔头")
print("创建了%d个工具" % Tool.count)
2.2 属性的获取机制
因此,要访问类属性有两种方式:
注意
三、 类方法和静态方法
3.1 类方法
语法如下
@classmethod
def 类方法名(cls):
pass
cls
参数示例需求
class Tool(object):
count = 0
def __init__(self, name):
self.name = name
Tool.count += 1
@classmethod
def show_tool_count(cls):
print("工具对象有%d个" % cls.count)
futou = Tool("斧头")
langtou = Tool("榔头")
print("创建了%d个工具" % Tool.count)
Tool.show_tool_count()
在类方法内部,可以直接使用 cls
访问 类属性 或者 调用类方法
3.2 静态方法
语法如下
@staticmethod
def 静态方法名():
pass
class Tool(object):
count = 0
def __init__(self, name):
self.name = name
Tool.count += 1
@classmethod
def show_tool_count(cls):
print("工具对象有%d个" % cls.count)
@staticmethod
def run():
# 不需要访问实例属性也不需要访问类属性的方法
print("正在创建工具")
futou = Tool("斧头")
langtou = Tool("榔头")
print("创建了%d个工具" % Tool.count)
Tool.show_tool_count()
Tool.run()
3.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_game(self):
print("%s 开始了游戏" % self.player_name)
Game.top_score = 999
Game.show_help()
Game.show_top_score()
xiaobai = Game("小白")
xiaobai.start_game()
Game.show_top_score()