Python基础21-面向对象(系统内置方法1-信息格式化操作)

2018-05-22  本文已影响13人  Jacob_LJ

Python基础-面向对象(方法)

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>
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
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

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

上一篇下一篇

猜你喜欢

热点阅读