Print all properties of a Python Class
本问题已经有最佳答案,请猛点这里访问。
我有一个类动物有几个特性,比如:
1 2 3 4 5 6 7 8 9 | 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... |
现在我要将所有这些属性打印到文本文件中。我现在做这件事的丑陋方式是:
1 2 | 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,) |
号
有没有更好的方法来做这个?
在这个简单的例子中,您可以使用
1 2 3 4 5 | 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对象,那么应该查看shelve-python对象持久性。
另一种方法是调用
1 2 3 4 5 6 7 | 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'] |
注意,
然后,您可以访问这些属性,例如,通过使用双下划线过滤:
1 2 | attributes = [attr for attr in dir(a) if not attr.startswith('__')] |
。
这只是一个可以用
也许你在找这样的东西?
1 2 3 4 5 6 | >>> class MyTest: def __init__ (self): self.value = 3 >>> myobj = MyTest() >>> myobj.__dict__ {'value': 3} |
号
试一下技巧:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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) |
输出:
1 | __main__.Animal(age = 10, color = 'Spotted', kids = 0, legs = 2, name = 'Dog', smell = 'Alot') |
。
这是完整的代码。结果就是你想要的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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] , |
试一下哔哔声
它打印的内容如下:
1 2 3 4 5 6 7 | instance(Animal): legs: 2, name: 'Dog', color: 'Spotted', smell: 'Alot', age: 10, kids: 0, |
。
我想这正是你需要的。