Как я могу получить только переменные класса? - PullRequest
4 голосов
/ 06 февраля 2009

У меня есть определение класса:

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

С __dict__ я получаю все атрибуты класса (члены и переменные). Также есть «Внутренние атрибуты» (например, __main__). Как я могу получить только переменные класса без создания экземпляров?

Ответы [ 2 ]

5 голосов
/ 06 февраля 2009

Я бы не знал простого способа, тем более что из POV интерпретатора не так уж много различий между методом класса и любой другой переменной (методы имеют дескрипторы, но это все ...).

Поэтому, когда вы хотите, чтобы ученики не вызывали, вы должны немного повозиться:

>>> 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']
1 голос
/ 06 февраля 2009
import inspect
inspect.getmembers(cols)

Есть много вещей, которые вы можете сделать с модулем проверки: http://lfw.org/python/inspect.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...