1

我有一些基础Tradertrader.py

class Trader(object):
    def __init__(self, exchange_name, api_key, api_secret):
        self.Exchange = Exchange(exchange_name, api_key, api_secret).exchange

Exchange和一个班级exchange.py

class Exchange(object):
    def __init__(self, name, api_key, api_secret):
        self.name = name
        exchange_id = name
        exchange_class = getattr(ccxt, exchange_id)
        self.exchange = exchange_class({
            'apiKey': api_key,
            'secret': api_secret,
            'timeout': 30000,
            'enableRateLimit': True,
        })

以上工作。所以我可以self.Exchange在 Trader 类内部使用函数来对抗交易所。但它之所以有效,只是因为这条线:

self.Exchange = Exchange(exchange_name, api_key, api_secret).exchange

我不喜欢我必须在它后面加上 .exchange 的事实。我只是在玩和学习python。我在 python 编程方面不是很有经验/我也不是硬币交易员,但我喜欢ccxt包。

如何在不需要将.exchangeExchange(...) 放在后面或者这是正常行为的情况下完成这项工作?还是我必须以不同的方式参加我的交流课?

谢谢

4

2 回答 2

4

由于exchangeExchange类实例的属性,因此这是正常行为。

如果你想访问exchange而不需要放在.exchange你的Exchange对象之后,你可能会考虑Exchange完全取消这个类——因为你似乎只使用它来exchange_class从 ccxt 获取实例——而是编写一个函数。

这是一个例子:

def get_exchange(exchange_name, api_key, api_secret):
    exchange_class = getattr(ccxt, exchange_id)
    return exchange_class({
        'apiKey': api_key,
        'secret': api_secret,
        'timeout': 30000,
        'enableRateLimit': True,
    })

class Trader:
    def __init__(self, exchange_name, api_key, api_secret):
        self.exchange = get_exchange(exchange_name, api_key, api_secret)

这样exchange, 的实例就可以直接访问an Trader

于 2018-08-26T20:29:03.970 回答
0

如果您想使用另一个类的属性,则需要创建一个实例

myInstance = Exchange()
print(myInstance.exchange_id) if you would like to print the name

范围是本地的,如果你想在创建它的函数或类之外使用它,你也可以在分配它的值之前声明一个全局变量

于 2018-08-26T20:23:44.157 回答