python - dir() 未列出的namedtuple 方法

标签 python python-3.x namedtuple

8.3. collections — Container datatypes — Python 3.6.4rc1 documentation ,
它指定了 namedtuple 的 5 个方法。

namedtuple_methods = {'_fields', '_make', '_replace', '_asdict', '_source'}

但是,这些方法无法通过 dir 方法获取

from collections import namedtuple
set(dir(namedtuple)) & namedtuple_methods
In [64]: set(dir(namedtuple)) & namedtuple_methods
Out[64]: set()

它们没有交集。

有趣的是,一个特定的namedtuple列出了方法

Book = namedtuple('Book', 'name, author')
In [70]: set(dir(Book)) & namedtuple_methods
Out[70]: {'_asdict', '_fields', '_make', '_replace', '_source'}

背后的机制是什么?

最佳答案

namedtuple 是一个工厂函数(从字面上看,源代码中有一个以 def namedtuple() 开头的函数),它本身不是一个类(它创建tuple 的子类,但它不是 tuplenamedtuple)。普通的 def-ed 函数不会'没有任何这样的特殊方法。

关于python - dir() 未列出的namedtuple 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47812380/

相关文章:

python - Typing.NamedTuple 和可变默认参数

python - Selenium Python 等待动画元素停止

python - 什么是python中的绝对导入?

python - 从字典键的子集创建命名元组

python - 如何确保编辑代码样式/空格时逻辑不发生变化?

python - 我应该使用属性还是 getter 和 setter?

python - 根据值从列表中删除 namedtuple

python - 脚本执行在 os.execlpe() 处停止

python - Siamese Network 的成本保持不变,为 0.6932

python - Pandas :选择列,如果不存在则默认