1.类方法:
使用赋值语句在class关键字下方可以定义类属性
类属性用于记录与这个类相关的特征
在类方法内部可以直接访问类属性或者调用其他的类方法
类方法的定义:
@classmethod
def 类方法名(cls):
pass
可以通过cls. 访问类的属性、调用其他的方法
class Tool:
count=0#类属性
@classmethod
def show_tool_count(cls):#类方法
print("工具对象的数量%d"% cls.count)
def __init__(self,name):
self.name=name
Tool.count+=1
a=Tool("榔头")
b=Tool("铁揪")
Tool.show_tool_count()#在类的外部调用类方法使用类名.类方法
print(Tool.count)#在类外部访问类属性同上
2.静态方法
在开发中,如果需要在类中封装一个方法,这个方法:
既不需要访问实例属性或者调用实例方法,也不需要访问类属性或者调用类方法
这个时候,可以把这个方法封装成一个静态方法
定义静态方法:
@staticmethod
def 静态方法名():
pass
静态方法需要用 @staticmethod 来标识,告诉解释器这是一个静态方法
通过 类名.调用静态方法
class Dog:
@staticmethod
def run():
#不需要访问实例属性也不需要访问实例方法
print("跑")
#通过类名.调用静态方法,不需要创建对象
Dog.run()
案例:
class Game:
#历史最高分(类属性)
top_score=0
def __init__(self,player_game):
self.player_name=player_game
@staticmethod
def show_help():
print("帮助信息:按start开始游戏")
@classmethod
def show_top_score(cls):
print("历史最高分 %d"% cls.top_score)
def start_game(self):
print("%s开始游戏 "%self.player_name)
#1.查看游戏的帮助信息
Game.show_help()
#2.查看历史最高分
Game.show_top_score()
#3.创建游戏
xiaoming=Game("小明")
xiaoming.start_game()
如何确定方法的属性?
1.实例方法---方法内部需要访问实例属性
实例方法内部可以使用 类名.访问类属性
2.类方法---方法内部只需要访问类属性
3.静态方法---方法内部不需要访问实例属性和类属性
如果方法内部需要访问 实例属性,有需要访问类属性,应该定义实例方法,因为类只有一个,在实例方法内部可以使用类名.访问类属性