类在python中的所有对象上添加属性

类在python中的所有对象上添加属性,python,function,class,properties,initialization,Python,Function,Class,Properties,Initialization,我在python上编程时发现了一个问题。我有一个Dinero(英语货币)类,它拥有DnD货币的所有属性 class Dinero: def __init__(self, copper_pieces, silver_pieces, electrum_pieces, gold_pieces, platinum_pieces) -> None: self.copper_pieces = copper_pieces self.silver_piec

我在python上编程时发现了一个问题。我有一个Dinero(英语货币)类,它拥有DnD货币的所有属性

class Dinero:
    
    def __init__(self, copper_pieces, silver_pieces, electrum_pieces, gold_pieces, platinum_pieces) -> None:
        self.copper_pieces = copper_pieces
        self.silver_pieces = silver_pieces
        self.electrum_pieces = electrum_pieces
        self.gold_pieces = gold_pieces
        self.platinum_pieces = platinum_pieces
    
    def __str__(self):
        return "Dinero obtenido:\n  Copper: "+str(self.copper_pieces)+"\n  Silver: "+str(self.silver_pieces)+"\n  Electrum: "+str(self.electrum_pieces)+"\n  Gold: "+str(self.gold_pieces)+"\n  Platinum: "+str(self.platinum_pieces)

    def add_gold(self, gold):
        self.gold_pieces += gold

    def agregar_dinero(self, dinero):
        self.copper_pieces += dinero.copper_pieces
        self.silver_pieces += dinero.silver_pieces
        self.electrum_pieces += dinero.electrum_pieces
        self.gold_pieces += dinero.gold_pieces
        self.platinum_pieces += dinero.platinum_pieces
然后我有一个名为Mochila(英语包)的类,它有一个物品列表和一个Dinero类

import dinero

class Mochila:

    def __init__(self, dinero:dinero.Dinero=dinero.Dinero(0,0,0,0,0), items:list=[]):
        self.items = items
        self.dinero = dinero
    
    def meter_item(self, item):
        self.items.append(item)
    
    def sacar_item(self, item):
        self.items.remove(item)
我主要设置了两个不同的mochila,mochila2取了mochila1的Dinero的值

import dinero
import mochila


mochila1 = mochila.Mochila()
mochila2 = mochila.Mochila()

print(mochila2.dinero)

nuevo_dinero = dinero.Dinero(10, 10,200,10,10)

print(mochila2.dinero)

mochila1.dinero.agregar_dinero(nuevo_dinero)

print(mochila2.dinero)

mochila2.dinero.agregar_dinero(mochila1.dinero)
mochila1.dinero = dinero.Dinero(0,0,0,0,0)

为什么会发生这种情况?我如何解决这一问题?

好的,看起来两个dinero实例是相同的,如果您注释掉您的str方法,您将看到它们在内存中占用完全相同的空间,因此:

print(mochila2.dinero)
print(mochila1.dinero) 
你回来了:

<__main__.Dinero object at 0x0000025D90EC0B08>
<__main__.Dinero object at 0x0000025D90EC0B08>

好的,看起来这两个dinero实例是一样的,如果你注释掉你的str方法,你会发现它们在内存中占用了完全相同的空间,因此:

print(mochila2.dinero)
print(mochila1.dinero) 
你回来了:

<__main__.Dinero object at 0x0000025D90EC0B08>
<__main__.Dinero object at 0x0000025D90EC0B08>