Linux slogan
Visite também: Segurança Linux · BR-Linux.org · Dicas-L · Doode · NoticiasLinux · SoftwareLivre.org · UnderLinux



» Screenshot
Linux: VMware+Lazarus+Konsole+KDE 3.3+KsmoothDock
Por jmarceno
» Login
Login:
Senha:

Se você ainda não possui uma conta, clique aqui.

Esqueci minha senha


Dica

Criando listas individuais para cada instância da mesma classe em Python
Linux user
Publicado por Danillo Souza em 07/11/2009

Login: danltmz, 32993 pontos
[ Hits: 2107 ]

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

Leitura recomendada
   Dica Linux recomendada Conectividade Social e Conexão Segura - Resolvido!
   Dica Linux recomendada Editor Vim - Introdução e trabalhando com Vim
   Dica Linux recomendada Restringindo conexão brute force com iptables
   Dica Linux recomendada Listar o modelo e o serial number da máquina no Linux
   Dica Linux recomendada O pacote mtools

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


  
Para executar esta ação você precisa estar logado no site, caso contrário, tudo o que for digitado será perdido.
Responsável pelo site: Fábio Berbert de Paula - Conteúdo distribuído sob licença GNU FDL
Site hospedado por:

Viva o Linux

A maior comunidade Linux da América Latina! Artigos, dicas, tutoriais, fórum, scripts e muito mais. Ideal para quem busca auto-ajuda em Linux.