Obs.: A versão do Python que eu uso é a 3.1.
Programando aqui uns exercícios para não enferrujar, reparei numa coisa que tinha deixado passar despercebido em relação a orientação a objetos em Python: quando você cria uma classe e essa classe possui uma lista como atributo, todas as instâncias compartilham a mesma lista, portanto, se você altera a lista para
uma instância, também estará alterando para as demais.
"Bom, preciso dar um jeitinho nisso" pensei eu, e encontrei uma solução muito simples, facílima de ser implementada. Pensei: "já que as listas são compartilhadas, os dicionários também devem ser.", e são.
O que eu pensei em fazer foi: criar um dicionário vazio compartilhado, onde no método __init__ ele seria preenchido, sendo a chave o id do objeto(self) e o valor uma lista []. Para tornar mais fácil o acesso a essa lista, criei métodos que retornavam a lista, elementos da lista, inseriam objetos na lista etc, o que fosse necessário.
Acho que não precisa de mais explicação, vocês devem ter entendido, mas pra finalizar, um exemplo de classe implementando isso:
#! /usr/bin/python3
class Teste:
dic = {}
def __init__(self):
self.dic[id(self)] = []
def getList(self):
return self.dic[id(self)]
def insList(self,x):
self.dic[id(self)].append(x)
def remList(self,indice):
self.dic[id(self)].pop(indice)
# Criando as instâncias
a = Teste()
b = Teste()
# Inserindo valores
a.insList(123)
b.insList(456)
# Recuperando Listas com os Valores
a.getList()
b.getList
Testem e comprovem o resultado!
Solução bem simples para um problema que as vezes nos atrapalha muito. ;)