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

Publicado por Danillo Souza em 07/11/2009

[ Hits: 10.294 ]

 


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

Gerando gráficos com Pylab

Programação funcional em Python

Leitura recomendada

Configuração do Ioncube Loader no Centos 64 bit para ambiente CPanel (painel de controle para servidores web hosting)

Atalho para Terminal (konsole) no KDE / openSUSE

Quebrando senha do usuário root (Debian e derivados)

Escolhendo sua distribuição Linux

Linux no MAC G3

  

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