Ответ 1
Вы можете получить атрибут __name__
для класса:
>>> type(ham).__name__
'eggs'
(здесь, используя type()
встроенный, чтобы получить класс).
Я создаю именованный кортеж следующим образом:
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'
но это кажется немного грязным. Есть ли более чистый способ сделать это?
Почему у названных кортежей есть этот аспект "яйца", если невозможно получить к нему доступ, не прибегая к частному методу?
Вы можете получить атрибут __name__
для класса:
>>> type(ham).__name__
'eggs'
(здесь, используя type()
встроенный, чтобы получить класс).
По теме атрибутов namedtuple:
>>> ham._fields
('x', 'y', 'z')
иногда полезно знать
>>> ham.__class__.__name__
'eggs'
На основе python doc, namedtuple
предоставляет новый подкласс подкатегорий с именем 'eggs'
Таким образом, вам нужно имя класса
и type(ham).__name__
предоставит вам имя класса