【问题标题】:How to write Python method with dictionary choices?如何使用字典选项编写 Python 方法?
【发布时间】:2018-11-15 12:59:09
【问题描述】:

我正在编写简单的 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,choice[self.interval] TypeError: get_candles() 取 1 位置参数,但给出了 3 个

我知道这可能是微不足道的问题,但我真的不明白问题出在哪里。我的第二个问题:如何在不使用 dict 的情况下编写它。我的意思是我想实现类似的目标:

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

【问题讨论】:

  • 哪个 get_klines 方法抛出了这个错误?因为您已经定义了一个 get_klines 方法,但您也在调用 client.get_klines。引发错误的调用是什么?
  • 请包含Client.get_klines(...) 定义,因为这是导致错误的函数调用。据我从错误消息中可以看出,您尝试将三个参数推送给它(self, self.symbol, choice[self.interval]),但它只需要一个(self)
  • 我正在调用 BnManager 实例 .get_klines() 。一个:def get_klines(self, symbol, interval):
  • 你能发布完整的回溯吗?
  • 嘿@tookas92 也许那些不是位置参数而是关键字参数。尝试使用 symbol= 和 inverval= 传递

标签: python oop dictionary methods


【解决方案1】:

对于重写问题,您可以查看Programmatic access to enumeration members and their attributes。基本上,文档说明您可以使用字符串作为 Enums 的键。

from enum import Enum

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

print(Color['RED'])  # output: <Color.RED: 1>

【讨论】:

    猜你喜欢
    • 2020-02-21
    • 2018-07-17
    • 1970-01-01
    • 2019-01-12
    • 2016-10-23
    • 1970-01-01
    • 2016-04-22
    • 1970-01-01
    • 2021-12-30
    相关资源
    最近更新 更多