Python: 如何使用来自不同 class 的属性
Python: how to use attribute from differenct class
我在trader.py
中有一些基本的classTrader
:
class Trader(object):
def __init__(self, exchange_name, api_key, api_secret):
self.Exchange = Exchange(exchange_name, api_key, api_secret).exchange
和 class 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 class 中使用 self.Exchange
来使用针对交易所的功能。但它只因为这一行才有效:
self.Exchange = Exchange(exchange_name, api_key, api_secret).exchange
我不喜欢我必须在它后面加上 .exchange。我只是在玩和学习 python。我在 python 编程方面不是很有经验/我也不是硬币交易员,但我喜欢 ccxt 包。
如何在不需要将 .exchange
放在我的 Exchange(...) 后面的情况下完成这项工作,或者这是正常行为吗?还是我必须以不同的方式进行交换 class?
谢谢
you need to create an instance if you would like to use an attribute from another class
myInstance = Exchange()
print(myInstance.exchange_id) if you would like to print the name
the scope is local you could also declare a variable global before assigning its value if you would like to use it outside the function or class it is created in
因为 exchange
是 Exchange
class 实例的属性,这是正常行为。
如果您想访问 exchange
而无需在 Exchange
对象后放置 .exchange
,您可以考虑取消 Exchange
class完全——因为你似乎只用它来从 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
的实例访问。
我在trader.py
中有一些基本的classTrader
:
class Trader(object):
def __init__(self, exchange_name, api_key, api_secret):
self.Exchange = Exchange(exchange_name, api_key, api_secret).exchange
和 class 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 class 中使用 self.Exchange
来使用针对交易所的功能。但它只因为这一行才有效:
self.Exchange = Exchange(exchange_name, api_key, api_secret).exchange
我不喜欢我必须在它后面加上 .exchange。我只是在玩和学习 python。我在 python 编程方面不是很有经验/我也不是硬币交易员,但我喜欢 ccxt 包。
如何在不需要将 .exchange
放在我的 Exchange(...) 后面的情况下完成这项工作,或者这是正常行为吗?还是我必须以不同的方式进行交换 class?
谢谢
you need to create an instance if you would like to use an attribute from another class
myInstance = Exchange()
print(myInstance.exchange_id) if you would like to print the name
the scope is local you could also declare a variable global before assigning its value if you would like to use it outside the function or class it is created in
因为 exchange
是 Exchange
class 实例的属性,这是正常行为。
如果您想访问 exchange
而无需在 Exchange
对象后放置 .exchange
,您可以考虑取消 Exchange
class完全——因为你似乎只用它来从 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
的实例访问。