所以我有一个名为“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循环中,我才能获得属性名称及其基于我的对象的值。
答案 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):
方法(稍微更新一下),每次打印object
类Car
答案 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