多个属性一次受到影响

时间:2016-10-11 15:16:31

标签: python class

当我更改stats.hp类的base_stats.hpCreature值时,它会一次设置两个值,这是一个问题因为它意味着我无法将生物的hp重置为它的基础值。以下是处理此

的部分代码
class Stats:

    def __init__ (self,hp,height,strength,speed,skill,agility,perception):
        x = random.randint(-2,2)
        self.hp = hp+x
        x = random.randint(-10,10)
        self.height = height+x
        x = random.randint(-2,2)
        self.strength = strength+x
        x = random.randint(-2,2)
        self.speed = speed+x
        x = random.randint(-1,1)
        self.skill = skill+x
        x = random.randint(-2,2)
        self.agility = agility+x
        x = random.randint(-2,2)
        self.perception = perception+x

class Creature:

    def __init__ (self,name,stats,top_image,side_image):
        self.name = name
        self.base_stats = stats
        self.stats = stats
        # More code here for rest of attributes

问题可能是因为Creature.statsCreature.base_stats引用了相同的stats变量?

(编辑)

Creature类的stats中引用的__init__Stats对象

2 个答案:

答案 0 :(得分:2)

是。它们引用相同的对象。您可以改用copy

from copy import copy
self.base_stats = copy(stats)
self.stats = copy(stats)

答案 1 :(得分:0)

您的__init__函数中的统计信息是Class Stats的对象是否正确?因此,您要将SAME对象分配给self.base_stats和self.stats。因此,对其中任何一个的任何更新都会影响另一个,因为您正在更改您的生物作为属性拥有的ONLY Stats对象。

class Creature:

    def __init__ (self,name,stats,top_image,side_image):  
        self.name = name
        self.base_stats = stats
        self.stats = stats