12.魔术方法3

__call__方法
  • 触发条件
    在使用()调用类时classname(),会去调用这个方法。这个方法使得
    python中的类可以像函数一样可以被调用
__str__方法和__repr__方法
  • 在交互模式下(命令行),print(a)和a打印出来的结果是有区别的
a = 'abc',
print(a)的结果是:abc
直接a的结果是:'abc',带字符串
  • 原因:
    a.我们在使用print()这个内置函数,并传入一个对象时。实际上是触发了这个对象
    的__str__方法,然后把__str__方法返回的内容输出到控制台
    自定义__str__,可以在创建类时,打印出该类的属性值
    b.在交互模式中,直接输入对象名称时,实际上是调用了__repr__方法

  • 注意点:
    重写__str__和__repr__方法时,必须返回一个字符串对象。

  • Python的内置函数str、repr、format
    1.内置函数str转换一个对象时,会触发该对象的__str__方法
    2.内置函数format处理对象时,会触发该对象的__str__方法
    3.内置函数repr处理对象时,触发该对象的__repr__方法

  • 总结:
    1.使用str函数或者print打印对象时,会优先去触发__str__方法。在没有定义__str__方法的情况下,会再去找__repr__方法,如果没有实现__repr__方法,会去找父类的__repr__方法
    2.使用repr()方法或者交互环境下输入变量,会先找自身的__repr__方法,如果自身没有,则去找父类的__repr__方法

  • 代码例子

class Hero(object):

    def __init__(self, name):
        print('执行__init__')
        self.name = name

    def __str__(self):
        print('执行__str__')
        return self.name  # __str__方法必须返回一个字符串


h = Hero('lin')
# 没自定义__str__时,打印结果是:<__main__.Hero object at 0x0000000001DB8160>
# 打印的是所创建的类的对象
# 如果自定义__str__并设置了返回值,那么打印的就是所定义的返回值
print(h)
format内置函数str.format(obj)的区别
  • format方法/内置函数的作用是格式化字符串
  • str.format(obj)的作用是将obj对象的repr返回的内容放到{}的位置:
    '内容:{}'.format(obj)
  • format内置函数和str.format()这两个的底层调用的format并不一样
    str.format()

    format内置函数

你可能感兴趣的:(12.魔术方法3)