Python面向对象实现Perfect Squares完美平方迭代器代码问题排查
问题排查
你写的代码存在三个核心问题:
- 方法调用逻辑错误:
get_values是你自定义的PerfectSquares类的成员方法,你却直接在Python内置列表类型的values变量上调用该方法,内置列表没有这个方法,运行会直接抛出AttributeError属性错误。 - 未符合迭代器协议要求:题目明确要求类支持迭代器,Python迭代器协议规定迭代器类必须实现
__iter__()和__next__()两个特殊方法,你当前编写的类完全不满足该要求,无法直接通过for循环遍历实例生成连续平方序列。 - 类缺少迭代状态维护:你当前的类初始化仅接收单个数值
x,没有维护迭代过程所需的当前计数变量,无法持续生成连续的平方数。
修正后实现方案
下面是符合要求的迭代器类实现,支持生成指定范围内的完美平方序列:
class PerfectSquares: def __init__(self, max_base): # max_base为平方数的最大底数,比如max_base=10就生成1到10对应的平方值 self.current_base = 1 self.max_base = max_base def __iter__(self): # 迭代器的__iter__方法固定返回实例本身 return self def __next__(self): # 底数超过最大值时终止迭代 if self.current_base > self.max_base: raise StopIteration square_val = self.current_base ** 2 self.current_base += 1 return square_val
使用示例
直接遍历PerfectSquares类的实例即可拿到连续完美平方值:
# 生成1到10对应的完美平方序列 for val in PerfectSquares(10): print(val)
运行后输出结果为:
1 4 9 16 25 36 49 64 81 100
如果需要生成无限长度的完美平方序列,删掉__next__方法里的终止判断即可,配合自定义终止条件使用即可。
内容的提问来源于stack exchange,提问作者samiur521
相关产品推荐
相关产品推荐

