• 类和对象10:对象访问方法


    目录

    1. __repr__(self)

    2. __str__(self)


    1. __repr__(self)

    该方法在 repr() 上被调用,交互响应,嵌套出现;

    如果一个类没有定义  __str__(),则该方法也在 str(object) 、print() 上被调用;

    repr(object):

    • repr() 是 Python 的内置函数,返回对象的可打印形式字符串。对于很多类型而言,本函数试图返回的字符串,会与将对象传给 eval() 所生成的结果相同;
    • 不然,结果就是一个尖括号包裹的字符串,包含了对象类型名称及其附加信息,附加信息通常包括对象的名称和内存地址。通过定义 __repr__() 方法,类可以控制本函数将为实例返回的内容。

    此方法通常被用于调试,因此确保其表示的内容包含丰富信息且无歧义是很重要的;

    重构 __repr__() 方法后,调试时直接输入实例对象名回车,即返回方法执行结果。

    1. #创建使用默认 __repr__() 的类和实例
    2. class Test:
    3. pass
    4. test1 = Test()
    5. #直接输入实例对象名回车,返回对象的可打印形式字符串
    6. test1
    7. <__main__.Test object at 0x0000024C3CB1DBE0>
    8. #创建重构 __repr__() 的类和实例
    9. class Test:
    10. def __init__(self, name = ''):
    11. self.name = name
    12. def __repr__(self):
    13. return f'objectname:{self.name}'
    14. test1 = Test('test1')
    15. #直接输入实例对象名回车,或调用 str()、print() 函数,成功调用重构的 __repr__() 方法
    16. test1
    17. objectname:test1
    18. str(test1)
    19. 'objectname:test1'
    20. print(test1)
    21. objectname:test1

    2. __str__(self)

    该方法在 str(object) 以及内置函数 format() 和 print() 上被调用,通过以生成一个对象的“非正式”或格式良好的字符串表示;

    返回值必须为一个字符串对象,否则调用 str(self)、print(self) 时报错;

    此方法与 object.__repr__() 的不同点在于 __str__() 并不预期返回一个有效的 Python 表达式:可以使用更方便或更准确的描述信息;内置类型 object 所定义的默认实现会调用 object.__repr__()。

    1. #创建重构 __repr__()、 __str__() 的类和实例
    2. class Test2:
    3. def __init__(self, name=''):
    4. self.name = name
    5. def __repr__(self):
    6. return 'Hi, everyone!'
    7. def __str__(self):
    8. return f'objectname:{self.name}'
    9. test2 = Test2('test2')
    10. #调用 repr()、str()、print(),成功调用重构方法
    11. test2
    12. Hi, everyone!
    13. str(test2)
    14. 'objectname:test2'
    15. print(test2)
    16. objectname:test2
    17. #创建重构返回非字符串的 __str__() 的类和实例
    18. class Test2:
    19. def __init__(self, name=''):
    20. self.name = name
    21. def __str__(self):
    22. return 1234
    23. #调用 repr() 正常
    24. test2 = Test2()
    25. test2
    26. <__main__.Test2 object at 0x0000022F161B1670>
    27. #调用 str()、print() 函数,报错
    28. print(test2)
    29. Traceback (most recent call last):
    30. File "<input>", line 1, in <module>
    31. TypeError: __str__ returned non-string (type int)
    32. str(test2)
    33. Traceback (most recent call last):
    34. File "<input>", line 1, in <module>
    35. TypeError: __str__ returned non-string (type int)

  • 相关阅读:
    VUE+Nodejs 商城项目练习项目(Node部分)
    sql server [使用游标] 将表数据打印成sql insert语句
    文心一言 VS 讯飞星火 VS chatgpt (98)-- 算法导论9.3 4题
    无频闪护眼灯哪个好?五款无频闪护眼台灯推荐
    vue blob实现自定义多sheet数据导出到excel文件
    智慧化工园区管理平台综合解决方案
    javaWeb超市订单管理系统
    linux 内核 dump_page
    cf #825 Div.2(A~C2)
    Proxy-静态代理
  • 原文地址:https://blog.csdn.net/davidksatan/article/details/125593664