【发布时间】:2021-06-09 03:09:12
【问题描述】:
当我运行下面的代码时,我得到一个 NameError ,表明 bbo 没有定义。
from typing import Tuple
import requests
import os
class Level:
__slots__ = ['price', 'amount']
def __init__(self, price: float, amount: float):
self.price = price
self.amount = amount
def initialize(trading_pair: str):
pass
def bbo(trading_pair: str) -> Tuple:
endpt = "https://api.binance.com"
api = "/api/v3/depth"
response = requests.get(endpt + api + trading_pair)
bids_str, asks_str = response.json()["bids"], response.json()["asks"]
bids = [[float(x) for x in row] for row in bids_str]
asks = [[float(x) for x in row] for row in asks_str]
return (Level(max(bids)[0],max(bids)[1]), Level(min(asks)[0],min(asks)[1]))
def main(trading_pair: str):
while True:
time.sleep(5)
bb, ba = bbo(trading_pair)
print(f"Best Bid: {bb.amount}@{bb.price} Best Ask: {ba.amount}@{ba.price}")
if __name__=='__main__':
trading_pair = os.getenv("TRADING_PAIR", "BTCUSDT")
initialize(trading_pair)
main(trading_pair)
当我将 self 添加到 main()
def main(self, trading_pair: str):
while True:
time.sleep(1)
bb, ba = self.bbo(trading_pair)
print(f"Best Bid: {bb.amount}@{bb.price} Best Ask: {ba.amount}@{ba.price}")
我收到一个 TypeError,说 main() 缺少 1 个必需的位置参数:“trading_pair”。我该如何解决这个问题?
【问题讨论】:
-
您需要在方法中添加
self作为第一个参数。 -
当我这样做时,我得到 TypeError missing 1 required positional argument: 'traiding_pair' for my all methods
-
我不是指
main函数;但是对于Level类中的方法。也就是说,我不完全确定您要做什么。我认为您可以做的一个选择是将def bbo(...)作为静态方法。 -
initialize(trading_pair)调用的目的是什么? -
目前初始化方法什么都不做。我保留它以防万一我需要初始化某些东西。当我在终端上运行这个脚本时,它可以完美运行,直到 main() 方法中的 bbo() 调用。
标签: python-3.x oop