Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python—有没有一种方法可以获取对象的所有属性_Python - Fatal编程技术网

Python—有没有一种方法可以获取对象的所有属性

Python—有没有一种方法可以获取对象的所有属性,python,Python,因此,我在另一个.py文件(MyClasses.py)中有一个名为“Car”的类 在我看来 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 =

因此,我在另一个.py文件(MyClasses.py)中有一个名为“Car”的类

在我看来

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循环中,我才能根据对象获取属性名及其值。

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']
以下是一个解决方案:

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))

最好在创建类时定义
\uuu str\uu
。如果类是您的,并且您创建了该类,那么您不会在其中包含所有属性。如果您只想获得一个类的所有属性列表,那么
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\uu str\uuuuuuuuuuuuuself:
方法(一点点更新),每次打印
Car
类的任何
对象
时,它都会起作用。。。 这会帮你省去所有的麻烦。。。 比如:


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

print vars(ferrari)
将打印

{'engine': 'Fast', '__module__': '__main__', 'color': 'Red', 'tires': 4, 'speed': 200, '__doc__': None}
engine: Fast
color: Red
tires: 4
speed: 200
要得到你想要的,这里是代码

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

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

尝试打印:
dir(法拉利)
的值,然后:
getattr(法拉利,'color')