将类项作为参数传递

时间:2013-09-18 05:04:07

标签: python class

我正在编写脚本,可以使用一些指导。该脚本的目的是允许玩家获取魔法物品并将其存储在特定的插槽中。我遇到的问题是尝试根据给出的插槽生成项目。

我正在创建一个类型dict的子类。这是我将存储用户项目的地方。

class PlayerData(dict):
    def __init__(self):
        self.weapon = 0
        self.head = 0
        self.back = 0
        self.chest = 0
        self.hands = 0
        self.feet = 0

    def __getattr__(self, attr):
        return self.__getitem__(attr)

    def __setattr__(self, attr, value):
        self.__setitem__(attr, value)

我将这些值存储在字典中。我有一个修改这些条目的类。其中一个方法迭代PlayerData中的项目,如果所有项目都为空,则抓取一个随机项目并尝试向其添加一个对象(类型为MagicItem)。 “self.steamid”是对玩家的引用。

def addItem(self):
    chance = 75
    slot = 0
    count = 0
    for k,v in PlayerDataDictionary[self.steamid].iteritems():
        if not v:
            count += 1
    if count = 6:
        chance = 100
    if random.randint(1,100) <= chance:
        slot = random.choice(PlayerDataDictionary[self.steamid])
        if slot:
            chooseReplace(self, slot)
        else:
            PlayerDataDictionary[self.steamid][slot] = MagicItem(slot)
    else:
        es.tell(userid, '#green', 'You destroyed your item during creation!')
        # This is a custom module for a game, this function works as intended

但是,创建的项目取决于插槽。我如何确定将PlayerData中的哪个插槽传递给MagicItem类?

1 个答案:

答案 0 :(得分:1)

从我理解正在发生的事情的方式来看,行:

slot = random.choice(PlayerDataDictionary[self.steamid])

是唯一分配slot的地方。因此,你应该能够在某处传递该变量(打印,另一个函数,无论你想用它做什么)。如果您正在寻找特定的索引,那么您将需要在PlayerDataDictionary中编写一个可以返回插槽索引的函数或者:

size = len(PlayerDataDictionary[self.steamid])
random_slot = random.randint(0, size)

这将为random_slot留下一个您可以传递的索引值

if PlayerDataDictionary[self.steamid][random_slot]:
    chooseReplace(self, random_slot)
else:
    PlayerDataDictionary[self.steamid][random_slot] = MagicItem(random_slot)

只要我正确理解你的问题,这应该可行。你对你究竟想要什么感到遗憾,所以如果我错过了确切的问题,请告诉我。