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