我在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(...)后面的情况下完成此工作,或者这是正常行为吗?还是我必须以不同的方式来开设交换课程?
谢谢
答案 0 :(得分:4)
由于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
。
答案 1 :(得分:0)
如果要使用另一个类的属性,则需要创建一个实例
myInstance = Exchange()
print(myInstance.exchange_id) if you would like to print the name
作用域是局部的,如果您想在其创建的函数或类之外使用它,也可以在分配其值之前声明一个全局变量。