这两种方法有区别吗?
例如,
from datetime import date
today = date(2012, 10, 13)
repr(today)
'datetime.date(2012, 10, 13);
today.__repr__()
'datetime.date(2012, 10, 13)'它们似乎做了同样的事情,但为什么有人想要使用后者而不是常规的repr?
发布于 2012-10-14 06:53:55
repr()使用__repr__ method实现自定义结果。由repr()、str()使用(如果未定义__str__ )。您不应该显式调用__repr__。
不同之处在于,repr()强制字符串作为返回类型,并且repr()在类对象上查找__repr__,而不是实例本身:
>>>> class C(object):
.... def __repr__(self):
.... return 1 # invalid non-string value
....
>>>> c = C()
>>>> c.__repr__() # works
1
>>>> repr(c) # enforces the rule
Traceback (most recent call last):
File "<console>", line 1, in <module>
TypeError: __repr__ returned non-repr (type 'int')
>>>> c # calls repr() implicitly
Traceback (most recent call last):
File "<console>", line 1, in <module>
TypeError: __repr__ returned non-repr (type 'int')
>>>> str(c) # also uses __repr__
Traceback (most recent call last):
File "<console>", line 1, in <module>
TypeError: __str__ returned non-str (type 'int')
>>>> c.__repr__ = lambda: "a"
>>>> c.__repr__() # lookup on instance
'a'
>>>> repr(c) # old method from the class
Traceback (most recent call last):
File "<console>", line 1, in <module>
TypeError: __repr__ returned non-repr (type 'int')
>>>>发布于 2012-10-14 06:34:18
这是一回事
可以将repr()视为包含以下代码:
def repr(obj):
return obj.__repr__()它所做的就是调用对象的__repr__()函数。我不确定为什么有人需要显式地调用对象的__repr__()方法。事实上,这样做通常是糟糕的编码风格(它令人困惑,并导致程序员提出像您刚才那样的问题)。
https://stackoverflow.com/questions/12877619
复制相似问题