принимает 1 позиционный аргумент, но дано 2; Комбинированная строка как аргумент

Я новичок в Python, и даже после поиска в инете я не понимаю, что здесь не так. Для использования 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 () принимает 1 позиционный аргумент, но дано 2

Это остальная часть Кодекса:

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, но не понимаю, где и как его здесь использовать ?!


person Tribic    schedule 25.10.2019    source источник
comment
Я использую этот фреймворк: github.com/sammchardy/python-binance   -  person Tribic    schedule 25.10.2019
comment
Вы пытаетесь построить аргумент ключевого слова в виде строки? Это не сработает.   -  person Klaus D.    schedule 25.10.2019
comment
^ Это. Также self используется только внутри объекта класса. Он вам не нужен в вашем основном файле Python   -  person Martinez    schedule 25.10.2019


Ответы (2)


x - это буквальная строка symbol='ETHBTC', а не «сохраненный» аргумент ключевого слова. Ваша попытка вызова эквивалентна

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

но этот метод не принимает никаких позиционных аргументов (кроме self). Вот подпись:

def get_order_book(self, **params):

Чтобы предварительно упаковать аргументы ключевого слова и смоделировать

client.get_order_book(symbol='ETHBTC')

вам нужен dict, чтобы инкапсулировать аргумент ключевого слова.

x = {'symbol': 'ETHBTC'}
client.get_order_book(**x)
person chepner    schedule 25.10.2019
comment
x = {'symbol': symbols [i] .get ('symbol')} depth = client.get_order_book (** x) отлично работает :) Большое спасибо! - person Tribic; 25.10.2019

метод get_order_book не ждет никаких параметров при вызове. КОГДА вы инициируете экземпляр класса командой 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

и если вы хотите, чтобы аргументы в методе были предопределены (по умолчанию vals), вы должны использовать:

...
def get_order_book(self, symbol="some_default_symbol"):
    ...
    print(symbol)    # will print "some_default_symbol"
person Andrey Suglobov    schedule 25.10.2019
comment
get_order_book - это предопределенный метод, который принимает необязательный аргумент ключевого слова symbol, а не то, что определяет OP. - person chepner; 25.10.2019