date: 2021-06-30title: Python中的strrepr #标题
tags: #标签
categories: python # 分类

参考:老男孩教育

str

在打印一个对象的时候,调用的是__str__方法;
在使用%s拼接一个对象的时候,调用的是__str__方法;
在str一个对象的时候,调用的是__str__方法;

  1. # 示例一:
  2. class Course:
  3. def __init__(self, name, price, period):
  4. self.name = name
  5. self.price = price
  6. self.period = period
  7. def __str__(self):
  8. return ', '.join([self.name, str(self.price), self.period])
  9. # 注意,上面return的返回值只能是字符串类型的
  10. a = Course('python', 18000, '5 month')
  11. print(a) # 假如类中没有定义__str__方法,那么返回值就是一个内存地址
  12. # 如果有__str__方法,则返回__str__方法中定义的返回值
  13. # 示例二
  14. class Clas:
  15. def __init__(self):
  16. self.stdents = []
  17. def append(self, name):
  18. self.stdents.append(name)
  19. def __str__(self):
  20. return str(self.stdents)
  21. clas = Clas()
  22. clas.append('张三')
  23. clas.append('李四')
  24. clas.append('王五')
  25. print(clas)
  26. # 如果类中没有定义__str__方法,则会打印如下:
  27. print(clas) # <__main__.Clas object at 0x000001AAC8127CF8>

repr

  1. class Clas:
  2. def __init__(self):
  3. self.stdents = []
  4. def append(self, name):
  5. self.stdents.append(name)
  6. def __repr__(self):
  7. return str(self.stdents)
  8. def __str__(self):
  9. return 'aaa'
  10. clas = Clas()
  11. clas.append('张三')
  12. print(str(clas)) # aaa
  13. print(repr(clas)) # ['张三']
  14. print(f'打印{clas}') # 打印aaa
  15. print('打印%s' % (clas)) # 打印aaa
  16. print('打印%r' % (clas)) # 打印['张三']
  17. '''
  18. 当我们打印一个对象,用%s进行字符串拼接或者str(对象)总是调用这个对象的__str__方法
  19. 如果找不到__srt__,就调用__repr__方法
  20. __repr__不仅是__str__的替代品,还有自己的功能
  21. 用%r进行字符串拼接或者用repr(对象)的时候,总是调用这个对象的__repr__方法
  22. '''