Python - 有没有办法获取对象的所有属性

时间:2017-04-29 08:06:52

标签: python

所以我有一个名为“Car'在另一个.py文件(MyClasses.py)

class Car:
    tires = 4
    color = ""
    speed = 0
    engine = ""

并在我的主要

import MyClasses

ferrari = MyClasses.Car()
ferrari.color = "Red"
ferrari.engine = "Fast"
ferrari.speed = 200

for prpty in ferrari:
    print(prpty)

我想要的输出是这样的:

tires = 4
color = Red
speed = 200
engine = Fast

我知道输出的格式取决于我。只有在我的for循环中,我才能获得属性名称及其基于我的对象的值。

5 个答案:

答案 0 :(得分:5)

dir()给出了所有属性,为了得到类变量,我们按如下所示过滤它:

>>> dir(ferrari)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'color', 'engine', 'speed', 'tires']

>>> classVariables = [attr for attr in dir(ferrari) if not callable(getattr(ferrari, attr)) and not attr.startswith("__")]

>>> print(classVariables)
['color', 'engine', 'speed', 'tires']

答案 1 :(得分:1)

为什么不创建一个函数来打印类的所有属性... 这样可以省去所有麻烦...... 喜欢:

class Car:
       tires=4
       speed=0
       color=" "
       def print_atr(self):
               print("tires = ",self.tires)
               print("speed = ",self.speed)
               print("color = ",self.color)

答案 2 :(得分:0)

这是一个解决方案:

ferrari = Car()
errari.color = "Red"
ferrari.engine = "Fast"
ferrari.speed = 200
for attr in [i in dir(ferrari) if not i.startswith('_')]:
    print('{}: {}'.format(attr, getattr(ferrari, attr))

答案 3 :(得分:0)

最好在创建类时定义__str__。如果class是你的并且你创建了类,那么whey不包含那里的所有属性。如果您只想获取列表的所有属性,那么dir将是好的。但是对于你的预期输出

class Car:
    tires = 4
    color = ""
    speed = 0
    engine = ""

    def __str__(self):
        return "tires="+str(self.tires)+"\ncolor="+self.color+"\nengine="+self.engine
        ##Include all the attribute here as above in intended way.


ferrari = Car()
ferrari.color = "Red"
ferrari.engine = "Fast"
ferrari.speed = 200

honda = Car()
honda.color = "Black"
honda.engine = "Slow"
honda.speed = 100

print ferrari
print honda

与JAVA一样,我们可以覆盖toString()方法来更改打印对象的默认行为,类似我们在Python中也可以定义打印对象的行为。

你的意图是

tires = 4
color = Red
speed = 200
engine = Fast

所以更新def __str__(self):方法(稍微更新一下),每次打印objectCar

时都会有效

答案 4 :(得分:0)

最简单的解决方案是使用vars(),例如:

print vars(ferrari)

将打印

{'engine': 'Fast', '__module__': '__main__', 'color': 'Red', 'tires': 4, 'speed': 200, '__doc__': None}

在这里得到你想要的是代码

fe = vars(ferrari)
for item in [i for i in fe if not i.startswith("_")]:
    print('{}: {}'.format(item, getattr(ferrari, item)))

这将打印

engine: Fast
color: Red
tires: 4
speed: 200