【发布时间】:2014-03-11 22:48:47
【问题描述】:
在阅读 Python 的 collections 模块 (http://hg.python.org/cpython/file/2.7/Lib/collections.py#l234) 的源代码时,我发现 namedtuple 函数从使用 exec 执行的字符串模板创建类的定义。为什么不通过简单地在函数内部定义一个类来完成它,就像你在编写装饰器时所做的那样?在我看来,它会更具可读性和更可靠的解决方案,不是吗?我敢打赌 Python 核心开发人员知道他们在做什么,那么我在这里缺少什么?
【问题讨论】:
-
您对可读性和可靠性的衡量标准是什么?字符串模板当然读起来像一个类,可靠性应该已经通过单元测试得到证明。
-
我的指标是常识和普遍接受的标准。按照
collections这部分的例子,我们可以将任何一段代码放在一个字符串中,并用exec调用它。虽然使用常规的类定义(加上自省)可能被认为是“有点神奇”,但模板解决方案看起来更像是一个肮脏的黑客。但是我并不是说这不是最好的解决方案——这就是我问这个问题的原因。
标签: python python-2.7 collections namedtuple