python - 如何从类中返回特定结果
问题描述
我有一个正在打印的类“contractDetails”。我想从中得到一个特定的结果(第 5 个元素)。
这是代码:
from ibapi.client import EClient
from ibapi.wrapper import EWrapper
from ibapi.common import *
from ibapi.contract import *
class TestApp(EWrapper, EClient):
def __init__(self):
EWrapper.__init__(self)
EClient.__init__(self, self)
def contractDetails(self, reqId, contractDetails):
print(contractDetails)
def start(self):
contract = Contract()
contract.symbol = 'AAPL'
contract.secType = 'OPT'
contract.currency = 'USD'
contract.exchange = 'SMART'
contract.lastTradeDateOrContractMonth = '202011'
self.reqContractDetails(1, contract)
def stop(self):
self.done=True
self.disconnect()
def main():
app = TestApp()
app.nextOrderId = 0
app.connect('127.0.0.1',7497,101)
app.run()
if __name__ == "__main__":
main()
我得到这样的东西:
423554420,AAPL,OPT,20201120,450.0,P,100,SMART...
我只想在那里打印第 5 个元素,即“450.0”。(行使价)
我试过了
print(contractDetails[5])
但我收到一个错误“TypeError:‘ContractDetails’对象不可下标”
例如,我可以使用“contractDetails.underSymbol”单独打印其他的。但是查看列表(https://interactivebrokers.github.io/tws-api/classIBApi_1_1ContractDetails.html)并尝试所有这些都没有给我我想要的。
据我了解,这是一个使用“contract.strike”传递给合同的值,当没有提供任何值时,它会打印出所有可用罢工的列表。
编辑:从评论中......“contractDetails.contract.strike”有效。
解决方案
如果 contractDetails 不是列表,您可以尝试将 contractdetails 转换为列表使用list()
或尝试以下方法,
j=0
for i in range contractDetails:
if j==4:
print(i)
j+=1
推荐阅读
- git - Git checkout by date 似乎不起作用:我看到了新文件
- gradle - Gradle 5.0:java.lang.String 无法转换为类 groovy.lang.Closure(lombok 问题)
- angular - 仅在订阅后返回 observable
- python - Pandas 中的 lambda 函数中的 Lambda 函数
- r - 带有 ggplot 的残差图,X 轴作为“排序”残差
- html - 如何在主要内容区域上重叠页脚但不隐藏内容
- ruby-on-rails-4 - 从 Rails 3 升级到 Rails 4 后,CarrierWave url nil
- excel - 当我使用相对范围时,VBA 会自动将我的范围转换为绝对值
- swift - 从“URL”转换为不相关类型“字符串”总是失败
- python-3.x - python3.6 matplotlib 极慢