python:类方法和静态方法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Dian1pei2xiao3/article/details/83140873

1.类方法:

  • 类属性就是针对类对象定义的属性

                   使用赋值语句在class关键字下方可以定义类属性

                   类属性用于记录与这个类相关的特征

  •      类方法就是针对类对象定义的方法

            在类方法内部可以直接访问类属性或者调用其他的类方法

  类方法的定义:

@classmethod
def 类方法名(cls):
    pass
  • 类方法需要修饰器@classmethod来标识,告诉解释器这是一个类方法
  • 类方法的第一个参数应该是cls
  1. 由那个类调用的方法,方法内的cls就是哪一个类的引用
  2. 这个参数和实例方法的第一个参数self类似
  • 通过  类名.调用类方法,调用方法时,不需要传递cls参数
  • 在方法内部:

              可以通过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.静态方法---方法内部不需要访问实例属性和类属性

如果方法内部需要访问 实例属性,有需要访问类属性,应该定义实例方法,因为类只有一个,在实例方法内部可以使用类名.访问类属性

猜你喜欢

转载自blog.csdn.net/Dian1pei2xiao3/article/details/83140873