我在Trader
有一些基本类trader.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,
})
以上工作。所以我可以在Trader类中使用self.Exchange
来使用函数来对付交换。但它的作用只是因为这一行:
self.Exchange = Exchange(exchange_name, api_key, api_secret).exchange
我不喜欢我必须在它之后放置.exchange。我只是在玩耍和学习python。我在python编程方面不是很有经验/我也不是硬币交易员,但我喜欢ccxt包。
如何在不需要将.exchange
放在我的Exchange(...)之后进行此工作,还是这种正常行为?或者我是否必须以不同的方式进行交换课程?
谢谢
由于exchange
是Exchange
类的实例的属性,因此这是正常行为。
如果你想访问exchange
而不需要在你的.exchange
对象之后放置Exchange
,你可能会考虑完全取消Exchange
类 - 因为它似乎只是用它来从ccxt获取exchange_class
的实例并改写函数。
这是一个例子:
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
将直接通过Trader
实例访问。
如果要使用其他类的属性,则需要创建实例
myInstance = Exchange()
print(myInstance.exchange_id) if you would like to print the name
范围是本地的,如果你想在它创建的函数或类之外使用它,你也可以在赋值之前声明变量global。