交换两个实例的属性
Swapping attribute of two instances
所以我正在尝试制作一款回合制纸牌游戏,其中一张纸牌在玩时可以交换“施法者”和“被施法者”的手(不确定这是否是一个词) .我创建了 Player
class 和实例 Jim
、Pam
、Dwight
和 Michael
。每当打出那张牌时,我都必须在两个玩家之间交换 hand
属性。
class Player:
def __init__(self, name, hand=[]):
self.name = name
self.hand = [self.draw_card() for n in range(0, 2)]
我已经尝试创建一种方法,它采用“castee”,在本例中为 self
,并与施法者交换手,但它不起作用。这里 caster
是另一个实例的名称,例如它可以是 Michael.hand
而不是 caster.hand
:
def hand_swap(self):
self.hand, caster.hand = caster.hand, self.hand
我也试过以下但没有成功:
def hand_swap(self):
myhand = self.hand.copy()
casterhand = caster.hand.copy()
setattr(caster, "hand", myhand)
setattr(self, "hand", casterhand)
每次循环后,玩家和他们的手都会打印在字典中。代码没有抛出任何错误,但没有交换手,一切都保持不变。
我的代码有问题吗?或者当涉及到让一个实例更改另一个实例的属性时,它不是那么简单吗?
edit1:什么是“施法者”
edit2:我如何检查它是否失败
如果您将 caster
添加到 hand_swap()
,您将实现您的目标。
def hand_swap(self, caster):
self.hand, caster.hand = caster.hand, self.hand
然后交换手
pam.hand_swap(michael)
所以我正在尝试制作一款回合制纸牌游戏,其中一张纸牌在玩时可以交换“施法者”和“被施法者”的手(不确定这是否是一个词) .我创建了 Player
class 和实例 Jim
、Pam
、Dwight
和 Michael
。每当打出那张牌时,我都必须在两个玩家之间交换 hand
属性。
class Player:
def __init__(self, name, hand=[]):
self.name = name
self.hand = [self.draw_card() for n in range(0, 2)]
我已经尝试创建一种方法,它采用“castee”,在本例中为 self
,并与施法者交换手,但它不起作用。这里 caster
是另一个实例的名称,例如它可以是 Michael.hand
而不是 caster.hand
:
def hand_swap(self):
self.hand, caster.hand = caster.hand, self.hand
我也试过以下但没有成功:
def hand_swap(self):
myhand = self.hand.copy()
casterhand = caster.hand.copy()
setattr(caster, "hand", myhand)
setattr(self, "hand", casterhand)
每次循环后,玩家和他们的手都会打印在字典中。代码没有抛出任何错误,但没有交换手,一切都保持不变。
我的代码有问题吗?或者当涉及到让一个实例更改另一个实例的属性时,它不是那么简单吗?
edit1:什么是“施法者” edit2:我如何检查它是否失败
如果您将 caster
添加到 hand_swap()
,您将实现您的目标。
def hand_swap(self, caster):
self.hand, caster.hand = caster.hand, self.hand
然后交换手
pam.hand_swap(michael)