Как получить имя из именованного кортежа в python?

Я создаю именованный кортеж следующим образом:

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'

но это кажется немного грязным. Есть ли более чистый способ сделать это?

Почему у названных кортежей есть этот аспект "яйца", если невозможно получить к нему доступ, не прибегая к частному методу?

Ответы

Ответ 1

Вы можете получить атрибут __name__ для класса:

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

(здесь, используя type() встроенный, чтобы получить класс).

Ответ 2

По теме атрибутов namedtuple:

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

иногда полезно знать

Ответ 3

>>> ham.__class__.__name__
'eggs'

Ответ 4

На основе python doc, namedtuple предоставляет новый подкласс подкатегорий с именем 'eggs'

Таким образом, вам нужно имя класса

и type(ham).__name__ предоставит вам имя класса