Python的代表如何在类和实例上工作

时间:2019-04-20 17:00:57

标签: python python-3.x repr

我很好奇repr的工作方式。不能完全是

def repr_(x):
  return x.__repr__()

因为不适用于类,即

repr_(int)

导致错误,因为int的代表期望int对象作为第一个参数。我知道我可以通过创建具有所需repr的元类来自定义类的__repr__,但是我想知道Python内置的repr是如何工作的? 它如何专门处理将类传递给它的情况。

它会像try catch一样执行什么操作,首先尝试repr_做我的事,然后在MRO中查找其他代表吗?还是其他?

3 个答案:

答案 0 :(得分:0)

弄清楚了。如果我们检查Python内部计算repr的方式(我们可以在源文件object.c中看到),我们可以看到repr本质上是

def repr_(x):
  return x.__class__.__repr__(x)

答案 1 :(得分:0)

导入日期时间

today = datetime.date.today()

打印(今天(今天))

对于类的对象,当obj调用对象时,repr基本上会显示明确的输出。

答案 2 :(得分:-1)

文档https://www.cmi.ac.in/~madhavan/courses/prog2-2015/docs/python-3.4.2-docs-html/library/functions.html#repr

  

返回一个字符串,其中包含对象的可打印表示形式。   对于许多类型,此函数都会尝试返回一个字符串,该字符串   传递给eval()时将产生具有相同值的对象,   否则,表示形式是用尖括号括起来的字符串   包含对象类型名称以及   附加信息通常包括名称和地址   宾语。一个类可以控制此函数为其返回的内容   实例通过定义 repr ()方法。