class method 中 self 的含义

last modify

本质

  • 以下面的类和方法为例:

    class A:
        def f(self, x):
            print(x)
  • self 本质就是 A 的一个实例;

    # 定义
    a = A()  # 创建 A 的一个实例
    
    # 调用
    a.f(1)  # 1
  • a.f(1) 实际上就是 A.f(a, 1) 的语法糖;

使用场景

动态修改成员函数

  • 如果是将新函数赋值给,那么需要预留第一个位置给 slef

    # 定义一个新的 f
    def new_f(self: A, x):
        print(x + 1)
    
    A.f = new_f  # 将新函数赋值给类
    a.f(x)  # 2
  • 如果是将新函数赋值给类的实例,那么需要就需要去掉第一个位置的参数;

    # 定义一个新的 f
    def new_f(x):
        print(x + 1)
    
    a.f = new_f  # 将新函数赋值给类的实例
    a.f(x)  # 2

参考

Last updated