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
相关产品推荐
相关产品推荐

