接受1个位置参数,但给出2个;组合字符串作为参数

2024-10-02 14:23:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我对python还很陌生,即使在搜索了inet之后,我也不明白这里出了什么问题。 为了使用Binance API,我需要如下命令:client.get_order_book(symbol = 'ETHBTC')

因为符号是动态的,我试着

x1 = 'symbol = '
x2 = symbols[0].get('symbol')       #Output: ETHBTC
x = x1 + "'" + x2 + "'"
print(x)                            #Output: symbol = 'ETHBTC'

但当我打电话的时候

client.get_order_book(x)

它绘制了错误:

TypeError: get_order_book() takes 1 positional argument but 2 were given

以下是代码的其余部分:

client = Client(api_key, api_secret)

symbols = client.get_ticker()
print(symbols[0].get('symbol'))  #Output ETHBTC

y = len(symbols)
for i in range(y):
    x1 = 'symbol = '
    x2 = symbols[i].get('symbol')
    x = x1 + "'" + x2 + "'"
    print(x)  #Output: symbol = 'ETHBTC'
    print(client.get_order_book(x))

我读了很多关于self的书,但是我不明白,在哪里,如何在这里使用它?!你知道吗


Tags: clientapioutputgetbinanceordersymbolinet
2条回答

x是文本字符串symbol='ETHBTC',而不是“saved”关键字参数。 您尝试的呼叫等于

client.get_order_book("symbol='ETHBTC'"),

但是这个方法不接受任何位置参数(除了self)。这里是signature

def get_order_book(self, **params):

预打包关键字参数并模拟

client.get_order_book(symbol='ETHBTC')

您需要一个dict来封装关键字参数。你知道吗

x = {'symbol': 'ETHBTC'}
client.get_order_book(**x)

方法get_order_book调用时不要等待任何参数。 当您通过comand client=client()初始化类的实例时,默认情况下,self作为参数进入所有非staticmethod中,以引用方法内类的实例。您应该指出方法get_order_book获取一个参数:

class Client(object):
    ...
    def get_order_book(self, symbol):
        # do something with symbol

或者,如果不需要在方法中引用类的实例:

class Client(object):
    ...
    @staticmethod
    def get_order_book(symbol):
        # do something with symbol

如果要预定义方法中的参数(默认情况下为VAL),则应使用:

...
def get_order_book(self, symbol="some_default_symbol"):
    ...
    print(symbol)    # will print "some_default_symbol"

相关问题 更多 >