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"引用,因为我相信 True
、 False
和 None
都是 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/