PyCharm提示移除__new__返回语句中的生成器,原因何在?
为什么PyCharm提示移除生成器但代码运行正常?
这其实是PyCharm静态代码检查的误判啦,你的代码逻辑完全没问题,所以输出符合预期是正常的,咱们来拆解下原因:
tuple的
__new__方法本身支持生成器:tuple的构造函数(也就是父类的__new__方法)接受任何可迭代对象作为参数,生成器表达式本身就是可迭代的,所以super().__new__(cls, generator)这段代码完全合法。运行时会正确遍历生成器里的元素,创建出符合要求的IntTuple实例——比如你测试IntTuple([1, 'b', -3, 4]),会得到(1,4),完全符合你过滤正整数的需求。PyCharm的检查逻辑有局限:PyCharm的这个参数检查功能,可能没有准确识别到tuple的
__new__方法可以接受生成器这类“惰性可迭代对象”,它可能默认期望这里传入的是列表、元组这类“具象”的可迭代类型,所以误报了参数不匹配的提示。
如果你觉得这个提示烦,可以直接忽略它;也可以把生成器转换成列表(比如写成super().__new__(cls, list(generator))),但其实没必要——生成器的优势是节省内存,不用提前把所有元素都加载到内存里,原代码的写法反而更高效。
内容的提问来源于stack exchange,提问作者aurexav
相关产品推荐
相关产品推荐

