zoukankan      html  css  js  c++  java
  • python中__str__和__repr__魔法方法详解


    class
    Cat: """定义一个猫类""" def __init__(self, new_name, new_age): """在创建完对象之后 会自动调用, 它完成对象的初始化的功能""" # self.name = "汤姆" # self.age = 20 self.name = new_name self.age = new_age # 它是一个对象中的属性,在对象中存储,即只要这个对象还存在,那么这个变量就可以使用 # num = 100 # 它是一个局部变量,当这个函数执行完之后,这个变量的空间就没有了,因此其他方法不能使用这个变量 def __str__(self): """返回一个对象的描述信息""" # print(num) num是__init__函数的局部变量,作用域只在__init__函数内 return "名字是:%s , 年龄是:%d" % (self.name, self.age) # __repr__=__str__ def eat(self): print("%s在吃鱼...." % self.name) def drink(self): print("%s在喝可乐..." % self.name) def introduce(self): # print("名字是:%s, 年龄是:%d" % (汤姆的名字, 汤姆的年龄)) #self对应的就是对象 print("名字是:%s, 年龄是:%d" % (self.name, self.age)) # 创建了一个对象 tom = Cat("汤姆", 30) print(tom)

    总结:

    • 在python中方法名如果是__xxxx__()的,那么就有特殊的功能,因此叫做“魔法”方法
    • 当使用print输出对象的时候,只要自己定义了__str__(self)方法,那么就会打印从在这个方法中return的数据
    • __str__方法需要返回一个字符串,当做这个对象的描写
    • 事实上,__str__是被print函数调用的,一般都是return一个字符串,

        python里面的对象基本上都默认有个__str__供print函数所用

    •  
    • 当输出一个类的实例tom时,如果__str__和__repr__这两个方法都没有重写,会输出tom的地址;如果重写了str,用print(tom)可以输出__str__的返回值,如果重写了__repr__,直接写tom就可以输出__repr__的返回值。

      为了方便,可以在重写完__str__后来一句__repr__ = __str__  这样两个魔法方法完全一致(函数入口一样)

      》》两个函数同时存在,优先执行__str__函数

    • 可以理解为:__str__是给用户使用的,而__repr__是提供给程序员用于调试程序用的。

      一般来说,str 的返回结果在于强可读性,而 repr 的返回结果在于准确性。

      __str__和__repr__这两个方法都是用于显示的。(representation,表达,表示)

    • 我们可以使用 str 和 repr 方法定义类到字符串的转化方式,而不需要手动打印某些属性或是添加额外的方法。

      我们至少需要添加一个 repr 方法来保证类到字符串的自定义转化的有效性,str 是可选的。因为默认情况下,在需要却找不到 str 方法的时候,会自动调用 repr 方法。

      追加:其实后面用到juptyer book 时候就对这个深有体会了,比如一个数据在解释器中只有通过print才能打印出里面的值,这很麻烦。而在jupyter book中直接执行这个数据,就可以获得里面的数据,方便调

          试程序,即使获得反馈

  • 相关阅读:
    城市的划入划出效果
    文本溢出省略解决笔记css
    长串英文数字强制折行解决办法css
    Poj 2352 Star
    树状数组(Binary Indexed Trees,二分索引树)
    二叉树的层次遍历
    Uva 107 The Cat in the Hat
    Uva 10336 Rank the Languages
    Uva 536 Tree Recovery
    Uva10701 Pre, in and post
  • 原文地址:https://www.cnblogs.com/hemengjita/p/12286207.html
Copyright © 2011-2022 走看看