我正在使用Markana 教程学习 OOP python ,但在使用 Lab 16.8 时遇到了一些问题。(在其他一些麻烦中)我无法__iter__
正确使用该方法。我的方法如下所示:
def __iter__(self):
for e in self.l_investments:
yield e
这是我的代码(以及运行它的结果):http ://hastebin.com/wayuwakode.py
这是应该出现的结果:
>>> 'GOOG' in p
True
我得到:
>>> 'GOOG' in p
False
p 是 Portfolio() 类的一个实例。'GOOG' 是 Investment() 对象实例的 .name 属性。p 包含一个列表和一个 Investment() 实例的字典。
我可以改变我的__iter__
方法来产生名称:
def __iter__(self):
for e in self.l_investments:
yield e.name
这修复了它'GOOG' in p == True
,但它打破了另一个要求:
Failed example:
for stock in p:
print stock
Expected:
1000 shares of APPL worth 252730.00
5000 shares of CSCO worth 118700.00
500 shares of GOOG worth 245670.00
2000 shares of MSFT worth 50880.00
Got:
APPL
CSCO
GOOG
MSFT
如何更改__iter__
方法(或代码的任何其他部分)以同时满足这两个要求?
我对学习 OOP 的工作原理比解决这个特定问题更感兴趣。任何帮助将非常感激!