You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python静态方法继承场景下不使用self调用当前类变量的实现方案

Python静态方法访问当前调用类变量的解决方案

问题本质

@staticmethod 装饰的静态方法不会接收隐式的类或实例作为输入参数,因此你在方法内硬编码 A.var 时,无论通过父类还是子类调用该方法,永远只会访问父类A的属性,无法适配子类重写类属性的场景。

解决方案

将静态方法替换为@classmethod装饰的类方法即可,类方法的第一个参数会自动传入实际调用该方法的类对象(通常命名为cls),不需要修改原有调用方式就能实现你要的效果。
修改后的代码如下:

class A:
    var = 0
    lst = [100, 200, 300]

    @classmethod
    def static_function(cls):
        print(cls.var, cls.lst)  # 用cls代替硬编码的类名,自动指向当前调用的类

    def class_function(self):
        print(self.__class__.var, self.__class__.lst)


class B(A):
    var = 9
    lst = [999, 999, 999]


if __name__ == '__main__':
    B.static_function()   # 输出:9 [999, 999, 999] 符合预期
    B().class_function()  # 输出:9 [999, 999, 999]

补充说明

  • 类方法和静态方法的调用方式完全一致,都支持直接通过类名调用、通过实例调用
  • 仅当方法逻辑完全不需要访问任何类属性、实例属性时,才适合使用@staticmethod,其余需要关联类上下文的场景优先使用@classmethod

内容的提问来源于stack exchange,提问作者Chumicat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 10:39:02