29

我创建了一个这样的命名元组:

from collections import namedtuple
spam = namedtuple('eggs', 'x, y, z')
ham = spam(1,2,3)

然后我可以使用例如访问火腿元素

>>> ham.x
1
>>> ham.z
3

在口译员中,

>>> ham
eggs(x=1, y=2, z=3)

但是,如果我只想得到“鸡蛋”怎么办?我能想到的唯一方法是

>>> ham.__repr__.split('(')[0]
'eggs'

但这似乎有点乱。有更清洁的方法吗?

如果在不诉诸私有方法的情况下无法访问命名元组,为什么命名元组对它们具有这种“鸡蛋”方面?

4

4 回答 4

34

可以获取__name__类的属性:

>>> type(ham).__name__
'eggs'

(这里使用内置type()获取类)。

于 2012-06-07T20:59:54.633 回答
25

关于命名元组属性的主题:

 >>> ham._fields
    ('x', 'y', 'z')

有时知道是有用的

于 2017-03-29T00:48:56.947 回答
2

基于 python 的docnamedtuple为您提供了一个名为 'eggs' 的新元组子类

所以本质上你需要类名

type(ham).__name__会给你班级名称

于 2012-06-07T21:02:53.967 回答
1
>>> ham.__class__.__name__
'eggs'
于 2012-06-07T21:00:23.310 回答