Согласно официальному документу 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'
Код: Выделить всё
>>> 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)
>>>
Предположим, я создал 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