1 信息格式化操作
1.1 __str__
作用
一个对象的描述字符串, 更加方便用户阅读, 对用户更友好(属性值之类的)
触发方式
print 打印一个对象时
str() 函数时
格式
def __str__(self):
return "描述信息"
class Person:
def __init__(self, n, a):
self.name = n
self.age = a
def __str__(self):
return "这个人的姓名是%s, 这个人的年龄是:%s" % (self.name, self.age)
p1 = Person("fkm", 18)
# print(p1.name)
# print(p1.age)
print(p1)
# 不适用 __str__ 时,打印结果是:<__main__.Person object at 0x10a9e4630>
# 使用后,打印结果:这个人的姓名是fkm, 这个人的年龄是:18
#触发方式二
s = str(p1)
print(s, type(s)) # 这个人的姓名是fkm, 这个人的年龄是:18 <class 'str'>
1.2 __repr__
**
作用
一个对象的描述字符串, 更加方便机器处理, 对机器更友好(开发人员查看,实际类型和地址等)
触发方式
当我们在交互模式下, 直接执行某个变量, 就会输出对应信息
repr() 函数时
格式
def __repr__(self):
return "描述信息"
注意
一般情况下, 应满足如下等式
obj == eval(repr(obj))
或者描述一个实例详细的信息(类名等等)
- 通常通过以下方式
print(repr(p1)) # <__main__.Person object at 0x10a9e4630>
- 重写repr 描述
class Person:
def __init__(self, n, a):
self.name = n
self.age = a
def __repr__(self):
return "reprxxxxx"
p1 = Person("fkm", 18)
print(p1) # reprxxxxx
s = str(p1)
print(s, type(s)) # reprxxxxx <class 'str'>
print(repr(p1)) # reprxxxxx
- 如果同时重写str 和 repr
会优先寻找__str__,如果没有重写,则找__repr__
,都没有就按照系统默认的
class Person:
def __init__(self, n, a):
self.name = n
self.age = a
def __str__(self):
return "这个人的姓名是%s, 这个人的年龄是:%s" % (self.name, self.age)
def __repr__(self):
return "reprxxxxx"
p1 = Person("fkm", 18)
print(p1) # 这个人的姓名是fkm, 这个人的年龄是:18
s = str(p1)
print(s, type(s)) # 这个人的姓名是fkm, 这个人的年龄是:18 <class 'str'>
print(repr(p1)) # reprxxxxx
-
repr 交互模式下的触发
3 __str__ 和 __repr__使用区别
import datetime
t = datetime.datetime.now()
print(t) # 面向用户
print(repr(t)) # 面向开发者
tmp = repr(t)
result = eval(tmp) # 通过 eval 将__repr__面向开发者的对象,转为面向用户
print(result)
>>> 打印结果
2018-05-21 20:57:55.731912
datetime.datetime(2018, 5, 21, 20, 57, 55, 731912)
2018-05-21 20:57:55.731912
网友评论