码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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、静态方法:方法内部,不需要访问实例属性和类属性

    提问:

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

    答案:

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

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

     

  • 相关阅读:
    分布式事务解决方案之【Hmily实现TCC事务】
    .Net IDE智能提示汉化(.Net6、AspNetCore)
    【音视频|ALSA】基于alsa-lib开发ALSA应用层程序--附带源码
    Xray联动crawlergo自动扫描教程
    计算机毕业设计Java教师教学质量评估系统(源码+系统+mysql数据库+lw文档)
    30.【十进制和二进制的相互转化(超详解)】
    HTML5期末大作业:旅游网页设计与实现——旅游风景区网站HTML+CSS+JavaScript 景点静态网页设计 学生DW静态网页设计
    机器学习 笔记05——特征工程之特征处理:字典特征提取、文本特征提取
    Leetcode刷题详解——衣橱整理
    C++ 二叉搜索树练习
  • 原文地址:https://blog.csdn.net/weixin_48728769/article/details/126883754
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号