Python 入门简明教程
1. 1. 与 Python 的第一次亲密接触-写给初学者 2. 2. Python 语法关键字 3. 3. Python 的注释和语法 4. 4. Python 基本数据类型 5. 5. Python 输入输出 6. 6. Python 运算符 7. 7. Python 变量 8. 8. Python 命名空间和变量生存范围 9. 9. Python 逻辑判断 10. 10. Python For 循环语法 11. 11. Python While 循环语法 12. 12. Python 循环语法中 break 与 continue的使用 13. 14. Python 三目运算符 14. 15. Python 循环语法中 pass 语句的使用 15. 16. Python 循环语法示例 16. 17. Python 函数 17. 18. Python main 函数 18. 19. Python print 函数 19. 20. Python print format 输出格式化 20. 21. Python print 输出到文件 21. 22. Python 输入 22. 23. Python import 导入模块 23. 25. Python 中递归的使用 24. 26. Python 匿名函数 25. 27. Python lambda 26. 28. Python PIP 包管理机制 27. 29. Python 命令行参数 28. 30. Python Numbers 包 29. 31. Python 随机数 30. 32. Python String 转 int 31. 34. Python 自定义异常 Exception 32. 35. Python 继承 33. 36. Python 父类 34. 38. Python 操作符重载 35. 39. Python __str__ and __repr__

39. Python __str__ and __repr__

我们将研究两个重要的python对象函数,它们在调试python代码时非常有用登录中有关对象的有用信息。

Python语法

此方法返回一串对象的表示。当打印()str() function is invoked on an object.

此方法必须返回字符串对象。如果我们不为一个类实现&#u str_uu()函数,那么将使用内置的对象实现来实际调用u repr_uu()函数。

Python()

函数返回对象表示。它可以是任何有效的python表达式,例如元组,词典,字符串等。

repr() function is invoked on the object, in that case, __repr__() function must return a String otherwise error will be thrown.

Python的str和repr示例

这两个函数都在调试中使用,让我们看看如果不为对象定义这些函数会发生什么。


class Person:
    name = ""
    age = 0

    def __init__(self, personName, personAge):
        self.name = personName
        self.age = personAge

p = Person("Pankaj", 34)

print(p.__str__())
print(p.__repr__())

输出:


<__main__.Person object at 0x10ff22470>
<__main__.Person object at 0x10ff22470>

如您所见,默认实现是无用的。让我们继续并实现这两种方法。


class Person:
    name = ""
    age = 0

    def __init__(self, personName, personAge):
        self.name = personName
        self.age = personAge

    def __repr__(self):
        return {"name":self.name, "age":self.age}

    def __str__(self):
        return "Person(name="+self.name+", age="+str(self.age)+ ")"

请注意,我们返回的dict是针对uurepruuu函数。让我们看看如果我们使用这些方法会发生什么。


p = Person("Pankaj", 34)

# __str__() example
print(p)
print(p.__str__())

s = str(p)
print(s)

# __repr__() example
print(p.__repr__())
print(type(p.__repr__()))
print(repr(p))

输出:


Person(name=Pankaj, age=34)
Person(name=Pankaj, age=34)
Person(name=Pankaj, age=34)
{"name": "Pankaj", "age": 34}
<class "dict">
  File "/Users/pankaj/Documents/PycharmProjects/BasicPython/basic_examples/str_repr_functions.py", line 29, in <module>
    print(repr(p))
TypeError: __repr__ returned non-string (type dict)

请注意,repr()函数正在抛出TypeError since our __repr__ implementation is returning dict and not string.

让’;更改repr_uu函数的实现,如下所示:


    def __repr__(self):
        return "{name:"+self.name+", age:"+str(self.age)+ "}"

现在它返回字符串,对象表示调用的新输出将是:


{name:Pankaj, age:34}
<class "str">
{name:Pankaj, age:34}

前面我们提到过,如果我们不实现函数,那么就会调用函数。只需从Person类和print(p) will print {name:Pankaj, age:34}.

函数之间的区别

  1. __str_uu必须返回string对象,而uurepr_uu可以返回任何python表达式。
  2. 如果缺少实现,则使用函数作为回退。如果缺少函数实现,则没有回退。
  3. 如果函数返回的是对象的字符串表示,则可以跳过函数的实现。

摘要

两个函数非常相似。我们可以获得字符串格式的对象表示以及其他特定格式(如tuple和dict)来获取有关对象的信息。

您可以从我们的GitHub存储库.