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

问题描述 投票:0回答:2

我在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(...)之后进行此工作,还是这种正常行为?或者我是否必须以不同的方式进行交换课程?

谢谢

python python-3.x
2个回答
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实例访问。


0
投票

如果要使用其他类的属性,则需要创建实例

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

范围是本地的,如果你想在它创建的函数或类之外使用它,你也可以在赋值之前声明变量global。

© www.soinside.com 2019 - 2024. All rights reserved.