软件测试学习 之 Python 打印对象的属性(格式化+for循环相结合遍历字典与列表)

转载说明 ——
作者:骑士救兵
出处:51CTO博客
原文:Python打印对象的全部属性
(内容部分截取)


方法一 使用对象的__dict__内置属性

通过__dict__,就可以动态的获取到对象的全部属性。获得的是一个字典,属性名是字典的key,属性值是字典的value。从输出看,私有属性也可以获得,只是不包括公有属性
然后,如果只想要属性值的话,可以对字典再加工。复习一下字典的3个方法:

  • dict.items() :用元祖来存放key和vlaue
  • dict.keys() : 只包含key
  • dict.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__方法的返回值,重写__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个变量,前后都得改。 

你可能感兴趣的:(Python,__dict___,__str__,字典,遍历,格式化)