Python 3.13 property()继承__name__致Pyramid测试失败,该报哪个Bug?
针对Python 3.13与Pyramid测试冲突的解决方案
明确行为正确性:Python官方规范中,
property实例应当继承被包装函数的__name__属性。比如property(worker)里的worker是函数,该property对象的__name__就应等于worker.__name__。Python 3.12中property(worker)缺失__name__是不符合规范的错误行为,3.13的表现才是正确的——这是Python团队修复了之前的遗留问题。无需向Python提交Bug:问题根源是Pyramid的测试代码依赖了Python 3.12的错误行为(默认
property实例没有__name__),而非3.13存在问题。继续跟进你提交给Pyramid的Bug报告即可,建议在报告里明确说明Python版本间的行为差异以及3.13的行为才符合规范,方便Pyramid团队适配修复。快速验证方式:
执行以下代码在两个版本中对比:def worker(): pass p = property(worker) print(hasattr(p, '__name__')) print(getattr(p, '__name__', '不存在'))同时可查阅Python 3.13的更新日志,里面会有关于
property对象__name__属性修复的相关记录,进一步确认这是官方有意的修正。
内容的提问来源于stack exchange,提问作者Mattia Verga
相关产品推荐
相关产品推荐

