Python类内方法调用同类阶乘生成器报AttributeError如何解决
问题排查与解决
你看到的AttributeError: 'int' object has no attribute 'Factorial'是几个写法错误叠加触发的,逐个修正即可:
- 触发当前报错的直接原因:调用实例方法的逻辑错误。你写的
a.m(100)是直接用类名调用实例方法,Python会把你传入的整数100绑定到方法的self参数上,此时方法内的self是int类型的100,整数对象自然没有Factorial属性,直接抛出对应错误。 - 后续会触发的第二个错误:类内部调用实例方法不需要手动传
self。你写的self.Factorial(self)属于多余传参,Factorial方法定义时没有接收额外参数,修正调用方式为self.Factorial()即可。 - 后续会触发的第三个错误:阶乘逻辑里的取值错误。
Factorial方法里range(1, self)的写法是把类实例对象直接传给了range,range需要整数参数,这里应该取实例保存的阶乘上限属性self.n;另外range是左闭右开区间,要计算1到n的阶乘序列,右边界要写self.n + 1。
修正后完整可运行代码
class a: def __init__(self, n): self.n = n def Factorial(self): res = 1 for i in range(1, self.n + 1): res *= i yield res def m(self): s = [] for i in self.Factorial(): s.append(i) return s # 先初始化类实例传入参数n=100,再调用实例方法m print(a(100).m())
内容的提问来源于stack exchange,提问作者MRCMRC
相关产品推荐
相关产品推荐

