Мы используем namedtuple
так:В чем первый аргумент использования namedtuple?
>>> from collections import namedtuple
>>> Point = namedtuple('Point', ['x', 'y'])
>>> p=Point(1,2)
>>> p.x
1
Я нашел первый аргумент namedtuple
кажется бесполезным, так как:
Во-первых, мы не можем использовать его (для создания экземпляра, например):
>>> from collections import namedtuple
>>> P = namedtuple('Point', ['x', 'y'])
>>> p = Point(1,2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'Point' is not defined
Во-вторых, кажется, нет ограничений для него (например, мы не должны сделать его уникальным):
>>> P1 = namedtuple('Point', ['x', 'y'])
>>> P2 = namedtuple('Point', ['x', 'y', 'z'])
>>> p1 = P1(1,2)
>>> p2 = P2(1,2,3)
>>> p1
Point(x=1, y=2)
>>> p2
Point(x=1, y=2, z=3)
Я не нашел объяснений от manual или по поисковому запросу. Существует соответствующий вопрос here, но он не ответил, почему namedtuple
нужен первый аргумент и как его можно использовать или когда это необходимо.
Подумайте об этом - если у класса * не было '__name__', что бы выглядело' repr'? Если вы установите 'ClassName = namedtuple ('ClassName', ...)', то вы можете использовать, например. 'eval', чтобы воссоздать данный экземпляр. – jonrsharpe
Как вы думаете, откуда взялось название от namedtuple? –
@jonrsharpe У меня было недоразумение в отношении названий классов раньше, я думал, что они должны быть уникальными. – WKPlus