Как хранить дополнительные атрибуты через kwargs в классах данных Python

Я хотел бы иметь класс данных Python с необязательными атрибутами, которые можно было бы передать во время инициализации через kwargs.

Что-то типа

@dataclass(allow_kwargs_init=True)
class Person:
    name: str
    birth_year: int

me = Person("myself", 1910)
you = Person("yourself", 2020, company="StackOverflow")

print(me)  # Person(name='myself', birth_year=1910)
print(you)  # Person(name='yourself', birth_year=2020, company='StackOverflow')

Есть ли способ без переписывания функций __init__ и __repr__?


person Jean-Francois T.    schedule 04.07.2021    source источник
comment
repr создается во время создания класса и проверяет только поля, известные на тот момент, поэтому, к сожалению, я не понимаю, как вы могли это легко получить. Сочетание предложения связанного дубликата, вероятно, выглядело бы лучше всего, где у вас есть поле extra: field(default_factory=dict) и поле @classmethod, которое заполняет этот дополнительный словарь каждым неродным kwarg.   -  person Arne    schedule 06.07.2021
comment
@Arne Я тоже это имел в виду, на самом деле :) ... но не просто. Во всяком случае, я решил свою проблему, просто добавив дополнительное поле в атрибуты, так как я действительно знаю его имя :)   -  person Jean-Francois T.    schedule 07.07.2021