Для этого конкретного случая, при условии, что __slots__
не используется, и что три используемых атрибута на самом деле являются единственными атрибутами Trade
, вы можете сойти с рук с небольшим обманом, изменив:
h = HistoricalTrades(price=k.price, amount=k.amount, sell_date=k.sell_date)
to:
h = HistoricalTrades(**vars(k))
vars(k)
возвращает __dict__
из k
самого , который мы затем распаковываем с **
в пары имя / значение в качествеключевые аргументы для инициализации HistoricalTrades
с помощью.
Это решение немного сложное (как уже было отмечено, оно зависит от того, не используется ли __slots__
и не имеет ли других атрибутов).Действительно, хороший способ сделать это - определить альтернативный конструктор для HistoricalTrades
, который будет работать для вас, упрощая использование для вызывающей стороны:
class HistoricalTrades:
...
@classmethod
def from_trade(cls, trade):
return cls(price=trade.price, amount=trade.amount, sell_date=trade.sell_date)
Да, это тот же код, но этонаписано один раз, и каждый сайт вызова может упростить до:
h = HistoricalTrades.from_trade(k)
, что является одновременно кратким и самодокументированием.