Как «питонически» объединить классы данных Python с уникальными именами атрибутовPython

Программы на Python
Ответить
Anonymous
 Как «питонически» объединить классы данных Python с уникальными именами атрибутов

Сообщение Anonymous »

В Python модуль dataclasses предоставляет удобный интерфейс для хранения данных.
Предположим, у меня есть 2 класса, украшенных декоратором @dataclass, например

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

from dataclasses import dataclass, field

@dataclass
class A:
data_value1 : str = field(default='foo', metadata={'help': 'info about data_value2'})

@dataclass
class B:
data_value2 : float = field(default=0,9, metadata={'help': 'info about data_value2'})
def __post_init__(self):
self.data_value2 += 10
где я хотел бы выполнить операцию

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

C = A + B
в результате получается C, класс, экземпляр которого после создания будет вести себя следующим образом:

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

@cdataclass
class c:
data_value1 : str = field(default='foo', metadata={'help': 'info about data_value2'})
data_value2 : float = field(default=0,9, metadata={'help': 'info about data_value2'})
def __post_init__(self):
self.data_value2 += 10
Я понимаю, почему операция сложения не была определена для этого типа, но я подумал, что, пока имена атрибутов не перекрываются, это должно быть возможно. Разве что некоторые конфликтующие операции между различными методами классов, например, конфликты, которые могут возникнуть в функциях __post_init__.
Кто-нибудь знает питонический способ достижения этой цели? Я могу придумать способы, но они были бы очень запутанными.
Спасибо за вашу помощь и время, чтобы прочитать этот вопрос.
Я пробовал непосредственно складывая их вместе, но операция сложения для типа не была определена. Будет ли проще всего самому определить операцию сложения? Но я не слишком хорошо знаком с тем, как это сделать в декораторе классов. Может ли кто-нибудь помочь?

Подробнее здесь: https://stackoverflow.com/questions/793 ... bute-names
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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