Criando listas individuais para cada instância da mesma classe em Python

Publicado por Danillo Souza em 07/11/2009

[ Hits: 10.713 ]

 


Criando listas individuais para cada instância da mesma classe em Python



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. ;)

Outras dicas deste autor

Programação funcional em Python

Gerando gráficos com Pylab

Leitura recomendada

Instalar GRUB sem archinstall no Arch Linux em UEFI Problemático

Implementando servidor de horas no Linux

Entendendo o FHS

Trabalhando com Xampp no Linux

Usando o pipe

  

Comentários
[1] Comentário enviado por andrezc em 04/01/2010 - 16:55h

Ótima dica ! Que além de fazer com que economizamos bastante tempo ensinar mais sobre orientação a objetos na linguagem Python que é uma linguagem de programação de altíssimo nível ( very high level language ).



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts