绑定方法和非绑定方法

绑定方法和非绑定方法

(1)绑定方法

  • 在Python中,对象是类的实例,而方法是与类相关联的函数。当你调用一个对象的方法时,该方法可以访问该对象的数据和其他方法。方法与对象之间的关系就是通过绑定实现的。
  • 绑定方法是指类的实例方法,它在调用时自动将实例作为第一个参数传递给方法。

(1)绑定到对象的方法

class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def greet(self):
print(f"我叫{self.name} 今年{self.age}岁")
# 创建一个Person对象
person = Person(name="heart", age=23)
# 调用绑定给对象的方法
person.greet() # 我叫heart 今年23岁
# 类调用绑定给对象的方法,需要传self
Person.greet(self=person) # 我叫heart 今年23岁
  • 在这个例子中,greet 方法被绑定到 person 对象上。当调用 person.greet() 时,greet 方法能够访问 person 对象的属性(nameage)并输出相应的结果。

(2)绑定到类的方法 classmethod

  • 调用绑定到类的方法,不需要实例化对象

  • 在这个例子中,add 方法是一个类方法,通过装饰器 @classmethod 标识。类方法的第一个参数通常是 cls,它表示类本身而不是实例。在调用时,我们使用类名 Math.add(3, 5) 直接调用该方法,而不需要创建类的实例。

class Math():
# 绑定给类的语法糖 classmethod
@classmethod
def add(cls, x, y):
print(x + y)
# 类调用绑定给类的方法,将调用此方法的类,作为cls的参数自动传入,不需要创建类的实例。
Math.add(3, 5) # 8
# 对象调用绑定给类的方法,这里会自动检索到当前实例化对象的类,然后将类作为cls传入
res = Math()
res.add(1, 2) # 3

(2)非绑定方法 staticmethod

  • 在类内部用staticmethod装饰的函数即非绑定方法,本质上就是一个普通函数
  • staticmethod不与类或对象绑定,谁都可以调用,没有自动传值效果
class Math:
@staticmethod
def add(x, y):
return x + y
@staticmethod
def multiply(x, y):
return x * y
# 调用静态方法,无需实例化对象
sum = Math.add(3, 5)
print(sum) # 输出: 8
result = Math.multiply(3, 5)
print(result) # 输出: 15

总结

  • 若类中需要一个功能,该功能的实现代码中需要引用对象则将其定义成对象方法。
  • 需要引用类则将其定义成类方法、无需引用类或对象则将其定义成静态方法。
posted @   ssrheart  阅读(25)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示