2016-05-09 69 views
1

如何修改一個類的副本而不改變原始類?Python類不工作

當我有這樣一類:

class enemymob: 
    def __init__(self, name, level, damage, health, maxhealth, armour): 
     self.name = name 
     self.level = level 
     self.damage = damage 
     self.health = health 
     self.maxhealth = maxhealth 
     self.armour = armour 

Goblin = enemymob("Goblin", 1, 10, 50, 50, 5) 

,然後我設定敵人=精靈:

enemy = Goblin 

當我修改敵人的值,它也改變的值實例妖精也是如此。但是對於我的代碼,我需要實例Goblin的值保持不變,並且只更改其副本的值,即敵人。我怎樣才能做到這一點?

enemy.damage += 100 
print(enemy.damage) 
print(Goblin.damage) 

110                                                 
110                                                 


Process exited with code: 0 
+0

也許你想實例化兩個新的對象,而不是做一個副本。 – natschz

回答

2

語句enemy = Goblin使enemy變量指向與變量Goblin相同的實例。如果你想要一個新的實例可以獨立操作,你必須把它複製,例如,通過使用copy模塊:

import copy 
enemy = copy.copy(Goblin) 
0

的問題是,Goblinenemy都指向同一件事。當您執行Goblin = enemymob("Goblin", 1, 10, 50, 50, 5)後跟enemy = Goblin時,enemyGoblin都將指向同一個對象。

1

您可以使用deepcopy使對象的副本 -

from copy import deepcopy 

enemy = deepcopy(Goblin) 
0

在這種情況下,您將變量,敵人和地精都設置爲同一個對象。創建兩個這樣的對象:

enemy = enemymob("enemy", 1, 10, 50, 50, 5) 
Goblin = enemymob("Goblin", 1, 10, 50, 50, 5)