Python:如何使用来自differentct类的属性

时间:2018-08-26 20:14:52

标签: python python-3.x

我在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(...)后面的情况下完成此工作,或者这是正常行为吗?还是我必须以不同的方式来开设交换课程?

谢谢

2 个答案:

答案 0 :(得分:4)

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

如果您想访问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
  

作用域是局部的,如果您想在其创建的函数或类之外使用它,也可以在分配其值之前声明一个全局变量。