У меня есть различные входные потоки, которые предоставляют информацию, которую я хочу упаковать в объект, который я затем могу передать отдельным функциям:
class FruitBasket:
def __init__(self, a, b, c, **kwargs):
self.a = a
self.b = b
self.c = c
Однако каждый поток данных называет данные, которые я ищу, по-своему. Входные данные StreamA выглядят так:
{"apple" : 3, "banana" : 2, "citrus" : 0}
, а входные данные StreamB выглядят следующим образом:
{"fruit1" : 1, "fruit2" : 7, "fruit3" : 4, "dog" : 21}
В настоящее время мое решение для этого состоит в том, чтобы иметь отдельный класс, который отображает информацию между входными даннымии вывод объекта:
class StreamAMap(Enum):
a = "apple"
b = "banana"
c = "citrus"
class StreamBMap(Enum):
a = "fruit2"
b = "fruit1"
c = "fruit3"
Затем я передаю и этот класс "map", целевой объект и входные данные в функцию:
def translate(map_enum, target, data):
translation = {}
for item in map_enum:
translation[item.name] = data[item.value]
return(target(**translation))
data_a = {"apple" : 3, "banana" : 2, "citrus" : 0}
data_b = {"fruit1" : 1, "fruit2" : 7, "fruit3" : 4, "dog" : 21}
basket_1 = translate(StreamAMap, FruitBasket, data_a)
basket_2 = translate(StreamBMap, FruitBasket, data_b)
Это работает, но яИнтересно, есть ли более Pythonic способ достижения этого.
edit: Цель здесь состоит в том, чтобы сохранить FruitBasket
полностью отделенным от любого потока, который может произвести данные, которые заканчиваются в нем, то естькаждый поток знает, какая информация должна поступить в FruitBasket
, но независимо от того, какие потоки будут добавлены или удалены в будущем, мне не нужно ничего менять в классе FruitBasket
, а лишь гарантирую, что каждый потоквозвращение действительного FruitBasket
в основное приложение. Моя текущая реализация требует, чтобы для каждого нового потока, который я добавлял, был определен только класс "map", и мне интересно, есть ли "Pythonic" (встроенный) способ сделать это вместо того, чтобы использовать собственную функцию перевода для этого.
Чтобы прояснить, что я подразумеваю под "Pythonic", "Pythonic" способ определения среднего значения списка - это sum(list) / len(list)
вместо того, чтобы перебирать список для увеличения переменной счетчика и добавления каждого элемента впеременная суммы.