首页 > 解决方案 > Python:创建对象列表或将字符串转换为对象

问题描述

我有一个 python 代码,其中我有一个函数,我想通过对象实例列表并在满足特定条件时对这些实例进行更改。换句话说,是这样的:

def distToPlayers(self, list):
    self.playerlist = list
    returnls = []
    
    for i in self.playerlist:
        if distance(self.playerlist[i].xpos , self.playerlist[i].ypos) <= self.playerlist[i].catchRadius:
            returnls.append(self.playerlist[i])

        self.playerlist[i].caughtBall = True
   
    return returnls

其中 distance() 只是一个给出值的函数,而 list 是一个对象实例的列表,比如 receiver1。因此,receiver1 具有 xpos 和 ypos 之类的统计信息,此函数查看输入列表中的所有玩家,计算他们与 self 对象的距离,并返回运行该函数的对象所在的玩家列表他们的捕捉半径。

我的问题是:我该怎么做?我的代码给了我奇怪的错误,例如“列表索引必须是整数,而不是对象”。我的列表索引不应该是对象,那些索引应该是对象,但无论如何,也许这不是你应该做的事情。如果有人知道如何做到这一点,请告诉我!

我还想输入一个字符串列表,这些字符串是我要讨论的对象的名称(所以我会输入:

ball.distToPlayers(['receiver1', 'defback1', etc...]) 而不是ball.distToPlayers([receiver1, defback1]) ) .Then,我会将这些字符串转换为函数内的对象名称。我知道你可以通过说,将字符串转换为整数和浮点数,反之亦然int(x) or str(x)。有没有办法从字符串到对象实例?我试过 obj(x) 和 object(x),但似乎都不起作用。

任何建议表示赞赏。

标签: python

解决方案


def distToPlayers(self, lst):
    self.playerlist = lst
    returnls = []

    for player in self.playerlist:
        if distance(player.xpos , player.ypos) <= player.catchRadius:
            returnls.append(player)
            player.caughtBall = True

    return returnls

这是你想要的吗?


推荐阅读