2015-07-27 2 views
0

Я пытаюсь создать функцию, которая печатает все атрибуты моего класса. Кажется, что он работает хорошо, но есть одна проблема - он печатает методы, которые я не хочу.Получить все атрибуты, но не методы

def print_all(self): 
      attributes = [attr for attr in dir(self) 
       if not attr.startswith('__')] 
      for attr in attributes: 
       if getattr(self, attr) == None: 
        continue 
       value = str(getattr(self,attr)) 
       print attr + ':' + value 

Не могли бы вы посоветовать мне, как избежать методов печати?

+0

Таким образом, вы только хотите ип [ 'callable'] (https://docs.python.org/3/library/functions.html#callable) атрибуты? Кроме того, вы должны проверить значение 'None' на * identity *, а не * равенство * -', если foo - None: '. – jonrsharpe

+1

'self .__ dict__'? – IanAuld

+0

@jonrsharpe Почему я должен тестировать его по личность? спасибо –

ответ

0
def print_all_attrs(some_object): 
    for var in dir(some_object): 
     if not callable(var): 
      print "{} is an attribute".format(var) 

callable возвращает True/False для того, или нет, вы можете вызвать переменную как функцию. Это должно работать даже если атрибуты свойства, если вы не делаете странность как

class BadObj(object): 
     @property 
     def x(self): 
      return lambda: 3 + 2 

... но вы, вероятно, не делали это в любом случае.

1

вы также можете использовать ключи из дескриптора класса __dict__, например.

for key in self.__dict__: 
    print(key) 
Смежные вопросы