Попытка понять `_field_defaults` из `namedtuple` в Python 3.9 [закрыто]Python

Программы на Python
Anonymous
Попытка понять `_field_defaults` из `namedtuple` в Python 3.9 [закрыто]

Сообщение Anonymous »

Я новичок в API Nametuple, в частности, _field_defaults.
Согласно официальному документу Python 3.12.3,

некоторые Nametuple._field_defaults
Сопоставление имен полей словаря со значениями по умолчанию.

Почему следующий фрагмент кода, предложенный Copilot, не работает?
Изображение

Текстовый фрагмент кода выше.

Код: Выделить всё

from collections import namedtuple

# Define the namedtuple
Person = namedtuple('Person', 'name age')

# Set default values
Person._field_defaults['name'] = 'John'
Person._field_defaults['age'] = 30

# Create a namedtuple with default values
person1 = Person()

# Create a namedtuple with a different name
person2 = Person(name='Alice')

print(person1)  # Outputs: Person(name='John', age=30)
print(person2)  # Outputs: Person(name='Alice', age=30)
Произошла следующая ошибка.

Код: Выделить всё

>>> person1 = Person()
Traceback (most recent call last):
File "", line 1, in 
TypeError: () missing 2 required positional arguments: 'name' and 'age'
Почему p._field_defaults['age'] = 100 изменил словарь, но конструкция Person по умолчанию не обновилась?

Код: Выделить всё

>>> Person=namedtuple('Person', ['name', 'age'], defaults=['default_name', 0])
>>> p = Person()
>>> p
Person(name='default_name', age=0)
>>> p._field_defaults
{'name': 'default_name', 'age': 0}
>>> p._field_defaults['age'] = 100
>>> p = Person()
>>> p
Person(name='default_name', age=0)
>>>
Где я могу найти реализацию именованного кортежа Python? Я хотел бы узнать больше о том, как используется _field_defaults.
Предположим, я создал Account = Nametuple('Account', ['type', 'name', 'id' ]),
есть ли способ указать значения по умолчанию для типа и идентификатора и позволить пользователю указывать имя? Конечно, я могу определить Account как Account = Nametuple('Account', ['type', 'name', 'id'], defaults = ['default_type', None, account_id]). Но есть ли способ избежать указания None в поле defaults?

Подробнее здесь: https://stackoverflow.com/questions/783 ... python-3-9

Вернуться в «Python»