Pular para o conteúdo

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

Dica publicada em Linux / Introdução
Danillo Souza danltmz
Hits: 10.906 Categoria: Linux Subcategoria: Introdução
  • Indicar
  • Impressora
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

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
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Testem e comprovem o resultado!

Solução bem simples para um problema que as vezes nos atrapalha muito. ;)

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Programação funcional em Python

Gerando gráficos com Pylab

Aprenda Linux com Daniel Robbins (tutorial em inglês)

Formatando datas no Java e convertendo para o Firebird

Instalando Ubuntu Linux no ACER One

Gnome na velocidade da luz com Openbox

Instalando o Tema de Ícones Tela Circle

#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

Entre na sua conta para comentar.