打印Python类的所有属性

我有一个类动物与几个属性,如:

class Animal(object): def __init__(self): self.legs = 2 self.name = 'Dog' self.color= 'Spotted' self.smell= 'Alot' self.age = 10 self.kids = 0 #many more... 

我现在要打印所有这些属性到一个文本文件。 我现在做的丑陋的方式是:

 animal=Animal() output = 'legs:%d, name:%s, color:%s, smell:%s, age:%d, kids:%d' % (animal.legs, animal.name, animal.color, animal.smell, animal.age, animal.kids,) 

有没有更好的Pythonic方法来做到这一点?

在这种简单的情况下,你可以使用vars()

 an = Animal() attrs = vars(an) # {'kids': 0, 'name': 'Dog', 'color': 'Spotted', 'age': 10, 'legs': 2, 'smell': 'Alot'} # now dump this in some way or another print ', '.join("%s: %s" % item for item in attrs.items()) 

如果你想把Python对象存储在磁盘上,你应该看看搁置 – Python对象的持久性 。

另一种方法是调用dir()函数(请参阅https://docs.python.org/2/library/functions.html#dir )。

 a = Animal() dir(a) >>> ['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'age', 'color', 'kids', 'legs', 'name', 'smell'] 

请注意,该dir()试图达到任何可能达到的属性。

然后你可以通过双下划线过滤来访问属性:

 attributes = [attr for attr in dir(a) if not attr.startswith('__')] 

这只是dir()可能做的一个例子,请检查其他答案是非常好的pythonic方法:)

也许你正在寻找这样的东西?

  >>> class MyTest: def __init__ (self): self.value = 3 >>> myobj = MyTest() >>> myobj.__dict__ {'value': 3} 

尝试ppretty :

 from ppretty import ppretty class Animal(object): def __init__(self): self.legs = 2 self.name = 'Dog' self.color= 'Spotted' self.smell= 'Alot' self.age = 10 self.kids = 0 print ppretty(Animal(), seq_length=10) 

输出:

 __main__.Animal(age = 10, color = 'Spotted', kids = 0, legs = 2, name = 'Dog', smell = 'Alot') 

这是完整的代码。 结果正是你想要的。

 class Animal(object): def __init__(self): self.legs = 2 self.name = 'Dog' self.color= 'Spotted' self.smell= 'Alot' self.age = 10 self.kids = 0 if __name__ == '__main__': animal = Animal() temp = vars(animal) for item in temp: print item , ' : ' , temp[item] #print item , ' : ', temp[item] , 

试试吧,

它打印这样的东西:

 instance(Animal): legs: 2, name: 'Dog', color: 'Spotted', smell: 'Alot', age: 10, kids: 0, 

我认为正是你需要的。