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

Python如何在classmethod类方法内部调用类的其他方法

报错原因

square默认是实例方法,第一个参数self必须接收类的实例对象才能正常调用。你在类方法getsquare中直接调用cls.square(),没有传入实例对象,因此触发参数缺失报错。
你后续修改的版本能正常运行,是因为你删除了square的self参数,同时将number改为方法内部局部变量,此时square本质是类命名空间下的普通函数,不需要绑定实例即可调用,但这不符合常规的类方法调用类内函数的使用场景。

正确实现方式

根据你的使用场景,可选择以下任意一种方案:

  • 方案1:需保留实例属性逻辑(number在__init__中初始化),在类方法内先创建实例再调用实例方法
class Xyz:
    def __init__(self):
        self.number = 25
    
    def square(self):
        return self.number * self.number
    
    @classmethod
    def getsquare(cls):
        # 先实例化类
        obj = cls()
        # 通过实例调用实例方法
        return obj.square()

sq = Xyz.getsquare()
# 输出结果为625
  • 方案2:square无需依赖实例属性,将其改为静态方法
class Xyz:
    # 定义为类属性,无需实例即可访问
    number = 25
    
    @staticmethod
    def square():
        return Xyz.number * Xyz.number
    
    @classmethod
    def getsquare(cls):
        return cls.square()

sq = Xyz.getsquare()
  • 方案3:square需依赖类属性,直接将其改为类方法
class Xyz:
    number = 25
    
    @classmethod
    def square(cls):
        return cls.number * cls.number
    
    @classmethod
    def getsquare(cls):
        return cls.square()

sq = Xyz.getsquare()

内容的提问来源于stack exchange,提问作者Super Ultra Noob

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 14:36:03