如何修复实例化RangePrime类时出现TypeError: takes no arguments报错
问题原因及解决方法
报错根因
- 你当前定义的
RangePrime类没有实现构造方法__init__,因此实例化类的时候不能直接传入(1,5)这类参数,这是触发TypeError的直接原因。 - 另外你当前把
range_list定义为需要传参的实例方法,没法直接通过属性访问的形式range_prime.range_list拿到结果,需要对应调整实现逻辑。
修正后代码
class RangePrime: # 新增构造方法接收实例化传入的参数 def __init__(self, a, b): self.a = a self.b = b # 用property装饰器将方法转为可直接访问的属性 @property def range_list(self): x = [] if self.b < self.a: x.extend(range(self.b, self.a)) x.append(self.a) else: x.extend(range(self.a, self.b)) x.append(self.b) return x
运行验证
执行你的预期调用逻辑即可得到对应结果:
>>> range_prime = RangePrime(1, 5) >>> range_prime.range_list [1, 2, 3, 4, 5]
改动说明
- 新增
__init__构造方法,接收实例化时传入的a、b两个参数并赋值给实例属性 - 给
range_list方法添加@property装饰器,将其转换为可直接访问的实例属性,不需要加括号调用,符合预期的使用形式 - 调整
range_list内部的取值逻辑,直接读取实例属性self.a、self.b,不需要额外传参
内容的提问来源于stack exchange,提问作者PTP_XX
相关产品推荐
相关产品推荐

