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里面的对象基本上都默认有个__str__供print函数所用
为了方便,可以在重写完__str__后来一句__repr__ = __str__ 这样两个魔法方法完全一致(函数入口一样)
》》两个函数同时存在,优先执行__str__函数
一般来说,str 的返回结果在于强可读性,而 repr 的返回结果在于准确性。
__str__和__repr__这两个方法都是用于显示的。(representation,表达,表示)
我们至少需要添加一个 repr 方法来保证类到字符串的自定义转化的有效性,str 是可选的。因为默认情况下,在需要却找不到 str 方法的时候,会自动调用 repr 方法。
原文:https://www.cnblogs.com/hemengjita/p/12286207.html