Python类通过遍历lis来分配对象的值

2024-05-13 13:00:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在写一个程序,需要一个函数来跟踪多个不同货币钱包在多个交易所的模拟价值。我编写了一个类来声明、持有和检索模拟余额:

>>> class Balance:
    def __init__(self,exchange,currency):
        self.exchange = exchange
        self.currency = currency
    def update(self,val):
        self.val = val
    def get(self):
        qty = self.val
        if qty > 0:
            return qty
        else:
            return False

每个'balance keeper'对象由currency_exchange引用,如下所示。手动声明对象时,一切正常:

^{pr2}$

但是,我希望遍历以下列表并动态声明对象并按此方式分配值:

^{3}$

我遇到的问题是变量balance_keeper没有按照我的预期操作。例如,看上面最后两行。在

不是初始化对象okex_ADA,然后再初始化一个新对象okex_XMR,这个对象只是被每次迭代覆盖,balance_keeper应该保存的变量根本没有被初始化;相反,循环只是继续将对象分配给一个简单的变量名“balance_keeper”,而不是它应该保存的变量(例如okex_XMR):

>>> okex_XMR.get()
Traceback (most recent call last):
  File "<pyshell#73>", line 1, in <module>
    okex_XMR.get()
NameError: name 'okex_XMR' is not defined

如您所见,它不是创建一个新的对象,而是在迭代时覆盖上一个对象:

>>> balance_keeper.get()
10.0

我做错什么了?如何迭代这些列表,并正确初始化每个变量,而不是简单地覆盖占位符变量?在


Tags: 对象self声明列表getreturnexchangedef
2条回答

我想你没能理解python的一些语法。看看这个代码: ^{cd1>。如我所见,您所期望的是balance_keeper将成为类似okex_XMR的变量。不,不是那样的。在

  1. 上面的赋值只将balance_keeper分配给一个字符串。不是一个变量。请记住,cur+'_'+ex是一个表达式,它返回字符串!

  2. balance_keeper之后,balance_keeper=Balance(ex,cur)的将被覆盖。

  3. 这里的想法是保存多个钱包,每个钱包都由一对货币和汇率标识。这导致使用字典,其中key是(cur, ex)的元组。

使用字典通过指定字符串名称来存储对象

datadict = {}
for ex in EXCHANGES:
    for cur in CURRENCIES:
        ex_cur_name = cur+'_'+ex
        datadict[ex_cur_name] = Balance(ex, cur)

然后可以通过以下方式访问对象:

^{pr2}$

相关问题 更多 >