Как написать метод Python с выбором словаря? - PullRequest
0 голосов
/ 15 ноября 2018

Я пишу простой менеджер API, и у меня проблема с использованием словаря в методе, вот что я написал до сих пор:

class BnManager():
    def __init__(self, api_key, api_secret):

        self.api_key = api_key
        self.api_secret = api_secret
        self.client = Client(api_key, api_secret)

    def get_candles(self, symbol, interval):
        self.symbol = symbol
        self.interval = interval
        choice = {
            '1m' : Client.KLINE_INTERVAL_1MINUTE,
            '3m' : Client.KLINE_INTERVAL_3MINUTE,
            '5m' : Client.KLINE_INTERVAL_5MINUTE,
            '15m' : Client.KLINE_INTERVAL_15MINUTE,
            '30m' : Client.KLINE_INTERVAL_30MINUTE,
            '1h' : Client.KLINE_INTERVAL_1HOUR,
            '2h' : Client.KLINE_INTERVAL_2HOUR,
            '4h' : Client.KLINE_INTERVAL_4HOUR,
            '6h' : Client.KLINE_INTERVAL_6HOUR,
            '8h' : Client.KLINE_INTERVAL_8HOUR,
            '12h' : Client.KLINE_INTERVAL_12HOUR,
            '1d' : Client.KLINE_INTERVAL_1DAY,
            '3d' : Client.KLINE_INTERVAL_3DAY,
            '1w' : Client.KLINE_INTERVAL_1WEEK,
            '1m' : Client.KLINE_INTERVAL_1MONTH,
            }
        self.klines = self.client.get_klines(
            self.symbol, choice[self.interval])
        self.df = pd.DataFrame(self.klines, columns=[
            'Date', 'Open', 'High', 'Low', 'Close', 'Volume',
            'x', 'x1', 'x2', 'x3', 'x4', 'x5'])
        self.df.drop(labels=['x', 'x1', 'x2', 'x3', 'x4', 'x5'],
                     axis=1, inplace=True).astype(float)
        self.df['Date'] = date2num(pd.to_datetime(df.Date, unit='ms'))
        self.df['Change'] = df['Close'].diff()

Проблема появляется, когда я пытаюсь выполнить метод get_candles. Например, когда я пишу manager.get_candles('BTCUSDT', '1m'), я получаю:

self.symbol, выбор [self.interval] TypeError: get_candles () занимает 1 позиционный аргумент, но 3 были даны

Я знаю, что это, вероятно, тривиальный вопрос, но я действительно не понимаю, в чем проблема. И мой второй вопрос: как написать это без использования dict. Я имею в виду, я хотел бы достичь чего-то вроде:

self.klines = self.client.get_klines(
            self.symbol, Client.KLINE_INTERVAL_+interval)

1 Ответ

0 голосов
/ 15 ноября 2018

Вопрос переписывания вы можете найти в Программный доступ к элементам перечисления и их атрибутам . В основном документация объясняет, что вы можете использовать строки в качестве ключей для Enums.

from enum import Enum

class Color(Enum):
    RED = 1
    GREEN = 2
    BLUE = 3

print(Color['RED'])  # output: <Color.RED: 1>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...