'''__str__''' class Foo_1: pass f = Foo_1() print(f) # <__main__.Foo_1 object at 0x0000020783813D30> ---> 系统默认__str__ --->相当于执行str(f)--->f.__str__() class Foo: def __str__(self): return '自定制的对象的显示方式' f1 = Foo() print(f1) # 自定制的对象的显示方式 ---> 自定制__str__ class Message: def __init__(self, name, age): self.name = name self.age = age def __str__(self): return '名字是%s 年龄是%s' % (self.name, self.age) f2 = Message('alex', 18) print(f2) # 名字是alex 年龄是18 ---> 自定制__str__ '''repr()内置函数''' # repr() 函数将对象转化为供解释器读取的形式 s = 'alex' print(repr(s)) # 在终端能够看到输出结果为"'alex'" d = {'name': 'lhf', 'age': 18} print(repr(d)) # 在终端能够看到输出结果为"{'name': 'lhf', 'age': 18}" '''__repr__''' class Cat: def __init__(self, name): self.name = name def __repr__(self): return '名字是%s' % self.name c = Cat('alex') c # 在终端中,输入一个实例对象c显示的就是__repr__返回的内容 print(c) # 名字是alex '''__str和__repr之间的区别''' class Dog: def __init__(self, name): self.name = name def __str__(self): return '来自str' def __repr__(self): return '来自repr' d1 = Dog('alex') print(d1) # 当__str__和__repr__同时存在时,执行的是__str__;也就是说print(d1)相当于执行的是str(d1)--->d1.__str__(); # 当只有__repr__存在时,print依旧是先找str(d1)--->d1.__str__(),找不到就执行__repr__;__repr__在终端可以不调用print,直接输入实例对象即可显示返回内容 # 注意:这两方法的返回值必须是字符串,否则抛出异常