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

Publicado por Danillo Souza em 07/11/2009

[ Hits: 8.995 ]

 


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

Adobe Reader - Instalação do leitor de PDF mais famoso do mundo

Criando senhas seguras

Apresentando a distribuição GNU/Linux NetRunner 14.2

Instalando Firebird 2 com rfunc no Debian

Man pages em português

  

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
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts