• Python中关于类属性、类方法和静态方法的【综合案例】— 设计一个Game类


    欢迎关注博主 python老鸟 或 前往 『Python自学网』, 从基础入门免费课程开始,逐步深入学习python全栈体系课程,适合新手入门到精通全栈开发。


    免费专栏传送门:《Python基础教程

    如果需要学习类属性、类方法和静态方法可以看我之前的文章。

    文章传送门:

    类属性一icon-default.png?t=M85Bhttp://t.csdn.cn/W8I9f

    类属性二icon-default.png?t=M85Bhttp://t.csdn.cn/iELU2

    类方法和静态方法icon-default.png?t=M85Bhttp://t.csdn.cn/whOgm

    一、案例需求

    1.设计一个Game类

    2.属性:

    1. 定义一个类属性top_score记录游戏的历史最高分
    2. 定义一个实例属性player_name记录当前游戏的玩家姓名

    3.方法:

    1. 静态方法show_help显示游戏帮助信息
    2. 类方法show_top_score显示历史最高分
    3. 实例方法start_game开始当前玩家的游戏

    4.主程序步骤

    1. 查看帮助信息
    2. 查看历史最高分
    3. 创建游戏对象,开始游戏


     

    分析:

    需要设计一个游戏类,名字是Game,在游戏类中定义两个属性和三个方法。

    看第一个属性历史最高分,这个属性和Game类有关而和每次游戏并没有直接关系,所以定义成类属性。第二个属性,当前玩家姓名,可能每次玩家不同所以定义成实例属性。

    看方法,第一个显示游戏帮助信息,这个只需要在游戏中显示出提示的信息并不需要访问类属性和实例属性,这种方法定义为静态方法。第二个显示历史最高分,历史最高分是一个类属性,访问类属性的方法可以定义为类方法,第三个方法开始游戏,每次玩家开始游戏就需要调用这个方法,玩家姓名为实例属性这个方法就直接定义为实例方法。


    二、案例代码

    1. class Game():
    2. # 类属性:历史最高分,初始为0(计数器)
    3. top_score = 0
    4. def __init__(self, player_name):
    5. # 实例属性
    6. self.player_name = player_name
    7. # 静态方法
    8. @staticmethod
    9. def show_help():
    10. print("帮助信息:怪兽已进入主战区")
    11. # 类方法
    12. @classmethod
    13. def show_top_score(cls):
    14. print("历史最高分记录 %d" % cls.top_score)
    15. # 实例方法
    16. def start_game(self):
    17. print("%s 玩家开始玩游戏了-----" % self.player_name)
    18. # 1. 查看帮助信息
    19. Game.show_help()
    20. # 2. 查看历史最高分
    21. Game.show_top_score()
    22. # 3.创建游戏对象,开始游戏
    23. game = Game("python自学网")
    24. game.start_game()

    执行结果:

     


    三、案例小结

    1、实例方法:方法内部需要访问实例属性

    实例方法内部可以使用 类名. 访问类属性

    2、类方法:方法内部只需要访问类属性

    3、静态方法:方法内部,不需要访问实例属性和类属性

    提问:

    如果方法内部即需要访问实例属性又需要访问类属性,应该定义成什么方法?

    答案:

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

    以上案例把学习过的类属性、类方法、静态方法知识点揉合到一起使用了一下,仔细看并没有什么技术含量,只是简单的使用来熟悉使用方法。

     

  • 相关阅读:
    Nacos原理简单介绍
    【vector题解】杨辉三角 | 删除有序数组中的重复项 | 只出现一次的数字Ⅱ
    nodejs环境安装与配置记录
    Linux内核调试工具——Debugfs
    9.1.tensorRT高级(4)封装系列-自动驾驶案例项目self-driving-道路分割分析
    最高奖励5亿元,杭州出台政策,打造万亿级智能物联产业生态圈
    华为云 云证书(SSL)管理服务
    如何用CSS画一个三角形?
    学院打卡第16天
    如何使用Vim搭建Lua开发环境详解
  • 原文地址:https://blog.csdn.net/weixin_48728769/article/details/126883754