Obter nome das variaveis de classe python

765 views
Skip to first unread message

Fábio Barrionuevo

unread,
Mar 23, 2012, 4:26:56 PM3/23/12
to python...@googlegroups.com

Opa, como faço para obter nome das variaveis de classe python, somente as criadas por mim.

Em java utilizava a funcionalidade de reflexão para obter os variaveis em tempo de execução,algo como:
List<String> list = new List<String>();
Field[] fields = getClass().getFields();
    for (int i = 0; i < fields.length; i++ ) {
         list.add(fields[i].getName())


Tem como fazer isso em python?



--
Fabio C. Barrionuevo da Luz
UFT - Universidade Federal do Tocantins
Palmas - Tocantins - Brasil - America do Sul - Terra

João Júnior

unread,
Mar 23, 2012, 4:33:06 PM3/23/12
to python...@googlegroups.com
Oi Fábio, boa tarde,
você pode acessar a variável __dict__ do seu objeto. Ela vai contém, como o nome sugere, um dicionário com o nome e o valor das variáveis do objeto, daí você pode percorrer esse dicionário.

Abraços.


--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@googlegroups.com



--

João Júnior
Matemático Computacional - Computational Mathematician

E-mail: joaoju...@gmail.com
Fone: +55 (31) 9642-7061
www.dcc.ufmg.br/~jcaj
http://br.linkedin.com/in/joaojunior



Dirley

unread,
Mar 24, 2012, 7:59:16 AM3/24/12
to python...@googlegroups.com
Bom, o __dict__ pode ser uma opção, mas ele não retorna atributos das classes ancestrais. Você pode comprovar isso fazendo:

class A(object):
    atributo = 1

class B(A): pass

assert 'atributo' not in B.__dict__



Uma solução amplamente utilizada é o dir [1]. Ele retorna uma lista com os atributos de um objeto. Daí você pode iterar pela lista, usando um getattr no objeto. Algo assim:

def getfields(obj):
  fields = {}
  for name in dir(obj):
    fields[name] = getattr(obj, name)
  return fields


Outra opção, que eu imagino ser mais adequada, é o módulo inspect[2]. Especialmente a função inspect.getmembers [3]. Ela faz o mesmo que a função acima, e pela nota na documentação, imagino que seja baseada no dict.


Reply all
Reply to author
Forward
0 new messages