def shoot(self, limb):
    if not limb:
        pass
    else:
        limb = False


print Joe.body.head #prints out true
Bob.gun.shoot(Joe.body.head) # should print out false
print Joe.body.head #prints out true (???)

我是 Python 新手,正在制作游戏作为 LPTHW 的一部分。我的拍摄功能应该通过将其设置为 false 来禁用肢体,但它根本不编辑 bool 值。考虑到我可以直接设置 bool 值,这似乎有点多余,但拍摄函数将计算的不仅仅是更改 bool 值。帮助将不胜感激。

最佳答案

Python 按值传递其对象引用,因此通过执行 limb = False,您将一个值为 False 的新对象引用分配给参数 limb ,而不是修改该参数最初持有的对象。 (好吧,从技术上讲,它不是"new"引用,因为我相信 TrueFalseNone 都是 Python 中的单例。)

然而,这里有一些可行的方法。

def shoot(self, other, limbstr):
    try:
        if getattr(other, limbstr):     # Levon's suggestion was a good one
            setattr(other, limbstr, False)
    except AttributeError:
        pass   # If the other doesn't have the specified attribute for whatever reason, then no need to do anything as the bullet will just pass by

Bob.gun.shoot(Joe.body, 'head')

关于python - bool 值不改变,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11834833/

10-10 16:19