获取所有属性但不获取方法

时间:2015-07-27 15:25:15

标签: python class attributes

我正在尝试创建一个打印我班级所有属性的函数。它似乎工作得很好,但有一个问题 - 它打印的方法也是我不想要的。

 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

你能告诉我如何避免印刷方法吗?

2 个答案:

答案 0 :(得分:1)

您也可以使用类描述符__dict__中的键,例如

for key in self.__dict__:
    print(key)

答案 1 :(得分: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

......但你可能还没有这样做。