2009-02-06 9 views
4

J'ai cette définition de classe:Comment puis-je obtenir uniquement des variables de classe?

class cols: 
    name = 'name' 
    size = 'size' 
    date = 'date' 
    @classmethod 
    def foo(cls): 
     print "This is a class method" 

Avec __dict__ je reçois tous les attributs de la classe (membres et variables). Il y a aussi les "attributs internes" (comme __main__). Comment puis-je obtenir uniquement les variables de classe sans instanciation?

Répondre

1
import inspect 
inspect.getmembers(cols) 

Il y a beaucoup si des choses que vous pouvez faire avec le inspecter le module: http://lfw.org/python/inspect.html

+1

inspect.getmembers retourne juste quel que soit le rendement dir(), ce qui est ce que l'OP a demandé. –

5

Je ne sais pas d'une manière simple, d'autant plus que de POV, il n'y a pas de l'interprète que beaucoup de différence entre une méthode d'une classe et toute autre variable (les méthodes ont des descripteurs, mais c'est tout ...).

Ainsi, lorsque vous voulez que les membres de la classe non remboursables par anticipation, vous devez bricoler un peu:

>>> class cols: 
...  name = "name" 
...  @classmethod 
...  def foo(cls): pass 

>>> import inspect 
>>> def get_vars(cls): 
...  return [name for name, obj in cls.__dict__.iteritems() 
       if not name.startswith("__") and not inspect.isroutine(obj)] 
>>> get_vars(cols) 
['name'] 
Questions connexes