交换两个实例的属性

Swapping attribute of two instances

所以我正在尝试制作一款回合制纸牌游戏,其中一张纸牌在玩时可以交换“施法者”和“被施法者”的手(不确定这是否是一个词) .我创建了 Player class 和实例 JimPamDwightMichael。每当打出那张牌时,我都必须在两个玩家之间交换 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)