Python_面向对象:类方法&静态方法

一、类方法

1.1 概念和语法说明

 类方法就是针对类对象定义的方法。在类方法内部可以直接访问类属性或者调用其他的类方法

语法如下:

@classmethod        
def 类方法名(cls):    
    pass

说明:

类方法需要修饰器 @classmethod 来标识,告诉解释器这是一个类方法。

类方法第一个参数应是cls(class的缩写),参数也可以使用其他名称,不过习惯使用cls,作用与self类似,

在方法内部可以使用  cls.  访问类的属性以及其他的类方法。

1.2 代码演示

class Tool(object):

    count = 0

    @classmethod
    def show_count(cls):
        print(F"工具对象的数量:{cls.count}")

    def __init__(self, name):
        self.name = name
        # 通过 类名.类属性 的方式访问类属性;
        # 也可以通过 对象.类属性 的方式访问,但是一般不建议这么做。因为如果调用前使用了赋值语句结果会变更
        Tool.count += 1


# 创建工具对象
tool1 = Tool("钳子")
tool2 = Tool("扳手")
tool3 = Tool("改刀")

# 调用类方法
Tool.show_count()

 二、静态方法

2.1 概念和语法说明

在开发中,如果需要在类中封装一个方法,而这个方法既不需要访问实例属性或者调用实例方法,也不需要访问类属性或者调用类方法,这个时候就可以把这个方法封装成一个静态方法。

语法如下:

@staticmethod
def 静态方法名():
    pass

说明:

静态方法需要使用修饰器  @staticmethod 来标识,告诉解释器这是一个静态方法。

静态方法不需要使用self 或 cls

可以通过  类名.静态方法名  的方式调用静态方法

2.2 代码演示

class Person(object):

    @staticmethod
    def eat():
        print("喜欢吃")


Person.eat()

 三、案例演练

3.1 案例需求

开发一个小游戏,需要为游戏增加游戏说明,游戏会展示游戏最高分和玩家姓名。

分析:

游戏说明与游戏本身没有任何关系,只是对游戏起到一个说明的功能,因此采用静态方法

游戏分数为游戏的属性,不是玩家的属性,因此采用类方法

玩家姓名是游戏操作对象的属性,因此采用实例方法

3.2 代码演示

import random


class Game(object):

    # 创建类属性
    top_score = 0
    top_score_player = ""
    
    # 创建静态方法
    @staticmethod
    def game_help():
        print("这个游戏应该这样玩...")
    
    # 创建类方法
    @classmethod
    def show_top_score(cls):
        print(F"玩家:{cls.top_score_player} 获得游戏最高分 {cls.top_score} 分!")
    
    # 创建实例属性
    def __init__(self, player_name):
        self.player_name = player_name
    
    # 创建实例方法
    def play_game(self):
        print(F"玩家:{self.player_name},正在玩游戏...")
        score = random.randint(0, 100)
        print(F"游戏结束,得分:{score}")
        if score > Game.top_score:
            Game.top_score = score
            Game.top_score_player = self.player_name

Game.game_help()
zhangSan = Game("张三")
zhangSan.play_game()
liSi = Game("李四")
liSi.play_game()
Game.show_top_score()

输出结果:

这个游戏应该这样玩...
玩家:张三,正在玩游戏...
游戏结束,得分:70
玩家:李四,正在玩游戏...
游戏结束,得分:38
玩家:张三 获得游戏最高分 70 分!

总结

静态方法了解就行,使用封装过程中未作强行要求!

posted @ 2019-10-24 16:25  码上测  阅读(380)  评论(0编辑  收藏  举报