看完这篇文章,你的Python基础就差不多了( 八 )

  • 类方法 就是针对 类对象 定义的方法 在 类方法 内部可以直接访问 类属性 或者调用其他的 类方法
  • 语法如下
    @classmethoddef 类方法名(cls):pass
    • 类方法需要用 修饰器 @classmethod 来标识 , 告诉解释器这是一个类方法
    • 类方法的 第一个参数 应该是 cls 由 哪一个类 调用的方法 , 方法内的 cls 就是 哪一个类的引用 这个参数和 实例方法 的第一个参数是 self 类似 提示 使用其他名称也可以 , 不过习惯使用 cls
    • 通过 类名. 调用 类方法 , 调用方法时 , 不需要传递 cls 参数
    • 在方法内部 可以通过 cls. 访问类的属性 也可以通过 cls. 调用其他的类方法
    示例
    • 定义一个 工具类 , 每件工具都有自己的 name
    • 需求 —— 在 类 封装一个 show_tool_count 的类方法 , 输出使用当前这个类 , 创建的对象个数
    @classmethoddef show_tool_count(cls):"""显示工具对象的总数"""print("工具对象的总数 %d" % cls.count)4.3.2 静态方法
    • 在开发时 , 如果需要在 类 中封装一个方法 , 这个方法: 既 不需要 访问 实例属性 或者调用 实例方法 也 不需要 访问 类属性 或者调用 类方法
    • 这个时候 , 可以把这个方法封装成一个 静态方法
    语法如下
    【看完这篇文章,你的Python基础就差不多了】@staticmethoddef 静态方法名():pass
    • 静态方法 需要用 修饰器 @staticmethod 来标识 , 告诉解释器这是一个静态方法
    • 通过 类名. 调用 静态方法
    示例:
    • 静态方法 show_help 显示游戏帮助信息
    • 类方法 show_top_score 显示历史最高分
    • 实例方法 start_game 开始当前玩家的游戏
     
    看完这篇文章,你的Python基础就差不多了

    文章插图
     
     
    探索:
    • 实例方法 —— 方法内部需要访问 实例属性 实例方法 内部可以使用 类名. 访问类属性
    • 类方法 —— 方法内部 只需要访问 类属性
    • 静态方法 —— 方法内部 , 不需要访问 实例属性 和 类属性
    5. 单例5.1 单例设计模式
    • 设计模式 设计模式 是 前人工作的总结和提炼 , 通常 , 被人们广泛流传的设计模式都是针对 某一特定问题 的成熟的解决方案 使用 设计模式 是为了可重用代码、让代码更容易被他人理解、保证代码可靠性
    • 单例设计模式 目的 —— 让 类 创建的对象 , 在系统中 只有 唯一的一个实例 每一次执行 类名() 返回的对象 , 内存地址是相同的
    • 单例设计模式的应用场景 音乐播放 对象 回收站 对象 打印机 对象 ……
    5.2 静态方法: __new__
    • 使用 类名() 创建对象时 , Python 的解释器 首先 会 调用 __new__ 方法为对象 分配空间
    • __new__ 是一个 由 object 基类提供的 内置的静态方法 , 主要作用有两个: 在内存中为对象 分配空间 返回 对象的引用
    • Python 的解释器获得对象的 引用 后 , 将引用作为 第一个参数 , 传递给 __init__ 方法
    重写 __new__ 方法 的代码非常固定!
    • 重写 __new__ 方法 一定要 return super().__new__(cls) , 否则 Python 的解释器 得不到 分配了空间的 对象引用 , 就不会调用对象的初始化方法
    • 注意:__new__ 是一个静态方法 , 在调用时需要 主动传递 cls 参数

    看完这篇文章,你的Python基础就差不多了

    文章插图
     
     
    看完这篇文章,你的Python基础就差不多了

    文章插图
     
     
    5.3 Python 中的单例