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

绑定方法与非绑定方法

​Python 中的绑定方法与非绑定方法​

在 Python 中,​​方法(Method)​​ 根据其调用方式可分为 ​​绑定方法(Bound Method)​​ 和 ​​非绑定方法(Unbound Method)​​,两者的核心区别在于 ​​是否自动绑定实例或类作为第一个参数​​。


​一、绑定方法(Bound Method)​

​1. 实例方法(绑定到实例)​

  • ​定义​​:类中普通定义的方法(如 def method(self):)。
  • ​特点​​:
    • 通过 ​​实例调用时​​,自动将实例(self)作为第一个参数传递。
    • 方法名后不加括号时,返回的是绑定方法对象。
  • ​示例​​:
    class Dog:def bark(self):  # 实例方法print(f"{self.name} 汪汪叫!")dog = Dog()
    dog.name = "阿黄"
    dog.bark()          # 自动绑定 self,输出:阿黄 汪汪叫!
    print(dog.bark)     # <bound method Dog.bark of <__main__.Dog object>>

​2. 类方法(绑定到类)​

  • ​定义​​:用 @classmethod 装饰的方法,第一个参数为 cls(类本身)。
  • ​特点​​:
    • 通过 ​​类或实例调用​​ 时,自动绑定类(cls)作为第一个参数。
  • ​示例​​:
    class Cat:@classmethoddef meow(cls):  # 类方法print(f"{cls.__name__} 喵喵叫!")Cat.meow()     # 输出:Cat 喵喵叫!
    c = Cat()
    c.meow()       # 同样输出:Cat 喵喵叫!

​二、非绑定方法(Unbound Method)​

​1. 静态方法(无绑定)​

  • ​定义​​:用 @staticmethod 装饰的方法,​​不自动绑定参数​​。
  • ​特点​​:
    • 通过 ​​类或实例调用​​ 时,不会传递 selfcls
    • 本质上是 ​​类内部的普通函数​​。
  • ​示例​​:
    class Math:@staticmethoddef add(a, b):  # 静态方法return a + bMath.add(1, 2)  # 3(无需绑定)
    m = Math()
    m.add(3, 4)     # 7(同样无绑定)

​2. 直接通过类调用实例方法(Python 3 中的非绑定行为)​

  • ​Python 3​​:实例方法通过类调用时,变为普通函数,需手动传 self
  • ​Python 2​​:会报错(需显式指定实例)。
  • ​示例​​:
    class Student:def say_hi(self):print("Hi!")# Python 3 中:
    Student.say_hi()          # 报错:缺少 self 参数
    Student.say_hi(Student()) # 需手动传实例,输出:Hi!

​三、关键区别总结​

​特性​​绑定方法​​非绑定方法​
​调用方式​实例.方法()类.方法()类.方法()(需手动传参)
​参数传递​自动绑定 selfcls不自动绑定任何参数
​典型场景​操作实例/类属性工具函数或独立逻辑
​装饰器​无(实例方法)或 @classmethod@staticmethod

​四、实际应用场景​

​1. 绑定方法​

  • ​实例方法​​:操作对象自身数据(如修改属性)。
    class BankAccount:def __init__(self, balance):self.balance = balancedef withdraw(self, amount):  # 绑定到实例self.balance -= amount
  • ​类方法​​:工厂模式或操作类属性。
    class Pizza:@classmethoddef margherita(cls):  # 绑定到类return cls("Tomato", "Mozzarella")

​2. 非绑定方法​

  • ​静态方法​​:独立工具函数(无需访问实例或类)。
    class StringUtils:@staticmethoddef is_palindrome(s):  # 无绑定return s == s[::-1]

​五、总结​

  1. ​绑定方法​​:自动绑定调用者(实例或类),用于操作对象或类自身。
  2. ​非绑定方法​​:不自动绑定参数,适用于独立功能逻辑。
  3. ​选择原则​​:
    • 需要访问 self → ​​实例方法​​。
    • 需要访问 cls → ​​类方法​​。
    • 无需访问两者 → ​​静态方法​​。

​核心口诀​​:
​“绑定方法自动传参,非绑定方法手动传参”​​。


文章转载自:

http://kfqVbmlV.mmhyx.cn
http://Y4FYe684.mmhyx.cn
http://V6hdyHjp.mmhyx.cn
http://VQvWtlDo.mmhyx.cn
http://SWlynsoQ.mmhyx.cn
http://VZRHKvdu.mmhyx.cn
http://kVpx7Q8n.mmhyx.cn
http://ALpMrzKg.mmhyx.cn
http://X6W5U8UE.mmhyx.cn
http://faBc30Cu.mmhyx.cn
http://1O59ubLC.mmhyx.cn
http://CIPUkK3h.mmhyx.cn
http://wgxgOyCD.mmhyx.cn
http://YKEM8hZr.mmhyx.cn
http://1iRxrOfN.mmhyx.cn
http://JEw3JgPP.mmhyx.cn
http://A8bfsn8K.mmhyx.cn
http://6L9mOEdU.mmhyx.cn
http://y2klJ6Mg.mmhyx.cn
http://8b3h3u85.mmhyx.cn
http://V27iNgl9.mmhyx.cn
http://NZmlw6UE.mmhyx.cn
http://eP7hePDc.mmhyx.cn
http://LWcgvgMZ.mmhyx.cn
http://3yIlMWV8.mmhyx.cn
http://kw1XDC77.mmhyx.cn
http://oGgZNdHz.mmhyx.cn
http://CH8nq2Z0.mmhyx.cn
http://IdNRXbTG.mmhyx.cn
http://gUjdgYlw.mmhyx.cn
http://www.dtcms.com/a/384039.html

相关文章:

  • 北科大2025研究生英语超星慕课第一单元标准答案
  • 人工智能方面的入门书籍有哪推荐?
  • STL之string类(C++)
  • 大模型原理的解析
  • Java 事务失效场景全解析
  • 简陋的进度条程序
  • SpringAOP中的通知类型
  • Python之文件读写 day9
  • 深度学习和神经网络之间有什么区别?
  • Linux驱动学习(SPI驱动)
  • 【MySQL|第七篇】DDL语句——数据库定义语言
  • 计算机毕设选题推荐:基于Java+SpringBoot物品租赁管理系统【源码+文档+调试】
  • Redis集群部署模式全解析:原理、优缺点与场景适配
  • ESP32的烧录和执行流程
  • ABP vNext + OpenXML / QuestPDF:复杂票据/发票模板与服务器端渲染
  • Java 注解入门:从认识 @Override 到写出第一个自定义注解
  • 网络层 -- IP协议
  • 社招面试BSP:BootROM知识一文通
  • Knockout.js DOM 操作模块详解
  • 面试题知识-NodeJS系列
  • 【层面一】C#语言基础和核心语法-02(反射/委托/事件)
  • Jmeter性能测试实战
  • CSP-S 2021 提高级 第一轮(初赛) 阅读程序(3)
  • TTC定时器中断——MPSOC实战3
  • [数据结构——lesson10.2堆排序以及TopK问题]
  • Maven 本地仓库的 settings.xml 文件
  • 绑定数据管理
  • RTU 全面科普:从入门到 AI 时代的智能化演进
  • lxml对于xml文件的操作
  • 第23课:行业解决方案设计