转载说明 ——
作者:骑士救兵
出处:51CTO博客
原文:Python打印对象的全部属性
(内容部分截取)
通过__dict__
,就可以动态的获取到对象的全部属性。获得的是一个字典,属性名是字典的key,属性值是字典的value。从输出看,私有属性也可以获得,只是不包括公有属性。
然后,如果只想要属性值的话,可以对字典再加工。复习一下字典的3个方法:
dict.items()
:用元祖来存放key和vlauedict.keys()
: 只包含keydict.values()
: 只包含value上面3个方法返回的都是一个可迭代对象,可以用for遍历,但不是迭代器,不能用next方法。
然后用下面的方法打印
# 定义字典,模拟对象名.__dict__得到的字典
dict1 = {'name': 'Jerry', 'age': 36, 'course': 'Python', '_Teacher__salary': 20000}
# 先看一下3个方法返回的可迭代对象
print(dict1.items())
print(dict1.keys())
print(dict1.values())
# 用下面的方法输出
print('\n'.join(('%s:%s' % item for item in dict1.items()))) # 每行一对key和value,中间是分号
print(' '.join(('%s' % item for item in dict1.keys()))) # 所有的key打印一行
print(' '.join(('%s' % item for item in dict1.values()))) # 所有的value打印一行
a = dict1.items() 这个是可迭代对象,可以用for遍历
b = ("%s:%s"%item for item in a) 用for循环遍历a,每一项是个元祖,把元祖转成"%s:%s"的字符串形式。最外面的( )就是转成一个迭代器。也可以用[ ],转成列表。
print('\n'.join(['%s:%s' % item for item in dict1.items()]))
c = ‘\n’.join(b) 最后用join()方法完成字符串的拼接
重写__str__
方法之后,在打印这个对象的时候,不再打印对象的内存地址,而是打印__str__
方法的返回值,重写__str__方法
可以获取到对象的公有属性
def __str__(self): # 定义打印对象时打印的字符串
return " ".join(str(item) for item in (
self.display,self.name,self.age,self.course,self.__salary))
这个也可以这么写
return "%s %s %s %s %s"%(self.display,self.name,self.age,self.course,self.__salary)
这么写虽然好理解,但是前面的%s的数量必须和后面的变量一致,如果要加1个或减1个变量,前后都得改。