擅长:python、mysql、java
<p>对于这种特定情况,假设不使用<code>__slots__</code>,并且所使用的三个属性实际上是<code>Trade</code>的唯一属性,您可以通过一个小欺骗来逃脱,更改:</p>
<pre><code>h = HistoricalTrades(price=k.price, amount=k.amount, sell_date=k.sell_date)
</code></pre>
<p>致:</p>
<pre><code>h = HistoricalTrades(**vars(k))
</code></pre>
<p><a href="https://docs.python.org/3/library/functions.html#vars" rel="nofollow noreferrer">^{<cd3>} returns the ^{<cd4>} of ^{<cd5>} itself</a>,然后使用<code>**</code>将其解包到名称/值对中,作为要初始化<code>HistoricalTrades</code>的关键字参数</p>
<p>该解决方案有点笨拙(如前所述,它取决于不使用<code>__slots__</code>并且不具有任何其他属性)。实际上,实现这一点的好方法是为<code>HistoricalTrades</code>定义一个替代构造函数,它可以为您完成这项工作,从而简化调用者的使用:</p>
<pre><code>class HistoricalTrades:
...
@classmethod
def from_trade(cls, trade):
return cls(price=trade.price, amount=trade.amount, sell_date=trade.sell_date)
</code></pre>
<p>是的,代码是相同的,但只编写了一次,每个呼叫站点都可以简化为:</p>
<pre><code>h = HistoricalTrades.from_trade(k)
</code></pre>
<p>既简洁又能自我记录</p>