我正在尝试创建一个打印我班级所有属性的函数。它似乎工作得很好,但有一个问题 - 它打印的方法也是我不想要的。
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 :(得分: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
......但你可能还没有这样做。