__str__和__repr__

目錄python

1、__str__

  • 打印時觸發
class Foo:
    pass


obj = Foo()
print(obj)
<__main__.Foo object at 0x10d2b8f98>
dic = {'a': 1}  # d = dict({'x':1})
print(dic)
{'a': 1}
  • obj和dic都是實例化的對象,可是obj打印的是內存地址,而dic打印的是有用的信息,很明顯dic的打印是很是好的
class Foo:
    def __init__(self, name, age):
        """對象實例化的時候自動觸發"""
        self.name = name
        self.age = age

    def __str__(self):
        print('打印的時候自動觸發,可是其實不須要print便可打印')
        return f'{self.name}:{self.age}'  # 若是不返回字符串類型,則會報錯


obj = Foo('nick', 18)
print(obj)  # obj.__str__() # 打印的時候就是在打印返回值
打印的時候自動觸發,可是其實不須要print便可打印
nick:18
obj2 = Foo('tank', 30)
print(obj2)
打印的時候自動觸發,可是其實不須要print便可打印
tank:30

2、__repr__

  • str函數或者print函數--->obj.__str__()函數

  • repr或者交互式解釋器--->obj.__repr__()code

  • 若是__str__沒有被定義,那麼就會使用__repr__來代替輸出對象

  • 注意:這倆方法的返回值必須是字符串,不然拋出異常內存

class School:
    def __init__(self, name, addr, type):
        self.name = name
        self.addr = addr
        self.type = type

    def __repr__(self):
        return 'School(%s,%s)' % (self.name, self.addr)

    def __str__(self):
        return '(%s,%s)' % (self.name, self.addr)


s1 = School('oldboy1', '北京', '私立')
print('from repr: ', repr(s1))
from repr:  School(oldboy1,北京)
print('from str: ', str(s1))
from str:  (oldboy1,北京)
print(s1)
(oldboy1,北京)
s1  # jupyter屬於交互式
School(oldboy1,北京)
相關文章
相關標籤/搜索