当前位置: 首页 > article >正文

面向对象 类函数的区别 实例方法 类方法 静态方法 抽象方法

前言:面向对象类方法的说明:

  1. 实例方法

    • 定义:实例方法是在类中定义的,用于操作类的实例(对象)的属性和行为的方法。它的第一个参数通常是self(在 Python 中)或this(在 Java、C++ 等语言中),这个参数代表类的实例本身。
    • 区别
      • 与类的关联方式:实例方法与类的特定实例紧密相关。它可以访问和修改实例的属性,不同的实例调用同一个实例方法时,操作的是各自的属性。例如,在一个Person类中有一个age属性,每个Person实例的age可以不同,实例方法increase_age可以根据每个实例的age属性进行不同的操作。
      • 调用方式:需要通过类的实例来调用。例如,在 Python 中,如果有一个Person类,person = Person(),那么person.increase_age()就是调用实例方法。
    • 适用点
      • 对象行为模拟:当需要模拟对象的特定行为时,比如Car类中的drive方法,它可以改变汽车对象的速度、里程等属性,体现汽车的行驶行为。
      • 访问和修改对象属性:如果要获取或修改对象的属性,例如BankAccount类中的depositwithdraw方法,可以操作账户余额这个属性。
  2. 类方法

    • 定义:类方法是属于整个类的方法,它使用特定的装饰器(如 Python 中的@classmethod)来定义,第一个参数通常是代表类本身的cls(在 Python 中)。
    • 区别
      • 与类的关联方式:类方法与类本身相关联,而不是与类的实例。它可以访问和修改类的属性(静态属性),这些属性是被类的所有实例共享的。例如,一个Counter类有一个count属性记录实例的创建数量,类方法get_count可以返回这个共享的count属性的值。
      • 调用方式:可以通过类名直接调用,也可以通过实例调用,但一般建议通过类名调用。例如,在 Python 中,对于MyClass类,MyClass.class_method()或者obj = MyClass(); obj.class_method()(虽然可以这样做,但不推荐)。
    • 适用点
      • 工厂方法创建实例:用于创建类的实例的工厂方法通常定义为类方法。例如,Date类可以有一个类方法from_string,它接受一个日期字符串并返回一个Date类的实例。
      • 操作类级别的属性和状态:如果有一些属性或状态是与整个类相关的,而不是与单个实例相关,如类的配置参数,类方法可以用于设置和获取这些参数。
  3. 静态方法

    • 定义:静态方法是定义在类中的方法,但它不依赖于类的实例或类的状态。它使用特定的装饰器(如 Python 中的@staticmethod)来定义,没有类似selfcls这样的特殊参数。
    • 区别
      • 与类和实例的关联方式:静态方法既不与类的实例相关,也不与类本身的内部状态(如实例属性或类属性)相关。它更像是一个被组织在类命名空间中的普通函数。
      • 调用方式:可以通过类名或者类的实例调用,但调用方式与类和实例的状态无关。例如,在 Python 中,对于MyClass类,MyClass.static_method()或者obj = MyClass(); obj.static_method()
    • 适用点
      • 工具方法组织:当有一些与类相关的辅助功能,但又不涉及类的实例或类的状态时,适合定义为静态方法。例如,在一个MathUtils类中,addmultiply等数学运算方法可以定义为静态方法,方便代码的组织和调用。
      • 独立于对象和类状态的操作:比如一个FileUtils类中的check_file_extension方法,它只是检查文件名的扩展名,不依赖于文件对象的实例属性或者类的其他属性。
  4. 抽象方法(在抽象类中)

    • 定义:抽象方法是在抽象类中定义的方法,它只有方法签名,没有具体的方法体。在一些语言中(如 Python 通过abc模块),使用特定的装饰器(如@abstractmethod)来定义。
    • 区别
      • 与其他方法的关联方式:抽象方法是一种规范,它规定了子类必须实现的方法。它本身不能被实例化的类调用,因为没有具体的实现内容。与实例方法、类方法、静态方法不同,它不是用于直接的操作,而是用于定义接口。
      • 调用方式:抽象方法不能直接调用,它需要在子类中实现后才能通过子类的实例或类(如果是类方法形式的抽象方法)来调用。
    • 适用点
      • 接口定义和强制实现:在设计模式中,如策略模式、模板方法模式等,抽象方法用于定义一个通用的接口,强制子类按照这个接口实现特定的行为,确保不同子类的行为一致性和可替换性。例如,在一个图形绘制系统中,Shape抽象类可以有抽象方法draw,不同形状(如圆形、矩形等)的子类必须实现这个draw方法来绘制自己的形状。


http://www.kler.cn/a/449177.html

相关文章:

  • Mybatis分页插件的使用问题记录
  • 【工作流】工作顺序
  • stm32制作CAN适配器5--WinUsb上位机编写
  • python学opencv|读取图像(十八)使用cv2.line创造线段
  • LabVIEW实现WiFi通信
  • 使用 Buildroot 构建带有 Avahi 支持的 Linux 系统
  • ensp 基于端口安全的财务部网络组建
  • 【更新】LLM Interview
  • 【工作流】工作顺序
  • Java内区域详解
  • 开源 JS PDF 库比较
  • 4-Gin HTML 模板渲染 --[Gin 框架入门精讲与实战案例]
  • 细说STM32F407单片机DMA方式读写SPI FLASH W25Q16BV
  • Python从0到100(七十九):神经网络-从0开始搭建过拟合和防过拟合模型
  • DINO对比去噪训练代码分析
  • 范德蒙矩阵(Vandermonde 矩阵)简介:意义、用途及编程应用
  • 图学习新突破:一个统一框架连接空域和频域
  • 《开启微服务之旅:Spring Boot 从入门到实践》(一)
  • 短视频矩阵源码开发部署全解析
  • CentOS修改hostname,导致无法连接(网络不工作)
  • 动手学深度学习-深度学习计算-1层和块
  • 如何实现圆形头像功能
  • 【IC】TSMC先进工艺发展历程--从N5到A16
  • 统信UOS(1070)系统如何进入root用户模式下操作
  • Java 实现日志文件大小限制及管理——以 Python Logging 为启示
  • redis编译安装(版本6.2.6)