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

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

Ответы [ 2 ]

4 голосов
/ 25 октября 2019

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)
0 голосов
/ 25 октября 2019

метод get_order_book не ждет никаких параметров при вызове. Когда вы инициируете экземпляр класса с помощью команды client = Client () self is попадает во все не staticmethod s по умолчанию в качестве аргумента для ссылки на экземпляр класса внутри метода. Вы должны указать, что метод 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

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

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