如何创建可以创建相同角色变体的角色创建者? (见帖子)

时间:2015-08-31 21:31:02

标签: python function class

这是我的第一个问题BTW。 所以我一直在使用Python中的程序遇到这个问题,我正在创建一个能够使角色具有不同的统计数据,能力等的角色类。该类工作得很好,但问题是;我不知道如何制作角色的变体。 例如,

class Char:
    def __init__(self, HP, attack):
        self.HP = HP
        self.att = attack

Tom = Char(5, 7)
Bill = Char(6, 6)

player1 = Tom
player2 = Tom

print player1.HP, player2.HP
#prints out 5, 5
player1.HP = 3

print player1.HP, player2.HP
#prints out 3, 3

如果我可以制作角色的变体,它会在最后一部分打印出3,5。 我认为这可以用另一个类或函数修复,但我不知道如何。帮助

2 个答案:

答案 0 :(得分:0)

你有内存问题。当您分配player1 = Tom时,player1会获得对Tom的引用,与player2相同,这意味着player1.HP实际上正在更改Tom。相反,您要执行的操作是脚本顶部的from copy import deepcopy,然后说player1 = deepcopy(Tom)然后player2 = deepcopy(Tom)

答案 1 :(得分:0)

如果您打印id(player1)id(player2),您会看到它们指向同一个对象,这就是更改同步的原因。如果您想要创建变体,可以使用copy模块:

>>> import copy
>>> player2 = copy.copy(Tom)
>>> player2.HP = 3
>>> print player1.HP, player2.HP
5 3

另请参阅the documentation中浅层和深层复制之间的区别,这也解释了为什么这是必要的:

  

Python中的赋值语句不会复制它们创建的对象   目标和对象之间的绑定。对于收藏品   可变或包含可变项目,有时需要一份副本   可以在不改变另一个副本的情况下更改一个副本。