如果可能的话,这个(即
__repr__)应该看起来像一个有效的Python表达式,可以用来重新创建具有相同值的对象(给定适当的环境)。
那么为什么类的内置函数__repr__不按照该准则行事呢?
>>> class A(object):
... pass
>>> repr(A)
"<class 'A'>"
Run Code Online (Sandbox Code Playgroud)
为了满足准则,默认__repr__应返回"A",即通常为A.__name__。为什么它的行为不同?我相信,这将非常容易实施。
我可以在答案中看到,讨论中并不清楚repr应该返回什么。在我看来,该repr函数应该返回一个允许您重现该对象的字符串:
广告1。看一下内置的类案例(取自这个SO问题):
>>> from datetime import date
>>>
>>> repr(date.today()) # calls date.today().__repr__()
'datetime.date(2009, 1, 16)'
Run Code Online (Sandbox Code Playgroud)
显然,假设的上下文就像您使用 import 的基本形式,即import datetime,因为如果您尝试eval(repr(date.today())),datetime将不会被识别。所以重点是__repr__不需要从头开始表示对象。如果它在社区同意的上下文中是明确的就足够了,例如使用直接模块的类型和函数。听起来很合理,对吧?
广告2。我相信,仅仅给出如何重建物体的印象还不够repr。有助于调试是str.
所以我期望的repr是允许我eval对结果进行处理。对于类,我不希望获得从头开始重建类的整个代码。相反,我希望对我的范围内可见的类有明确的引用。就"Module.Class"足够了。无意冒犯,Python,但"<class 'Module.Class'>"它不仅仅只是削减它。
| 归档时间: |
|
| 查看次数: |
3636 次 |
| 最近记录: |