Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中的repr方法是否应始终返回字符串_Python_Python 3.x_Dictionary - Fatal编程技术网

python中的repr方法是否应始终返回字符串

python中的repr方法是否应始终返回字符串,python,python-3.x,dictionary,Python,Python 3.x,Dictionary,我是Python新手。我已经写了下面的代码-- 当我运行此程序时,它会生成以下错误-- 我在Python文档中读到,repr应该返回字符串,好了,明白了,那么为什么第一个print语句成功运行并打印了字典,第二个print生成了错误?不应该两个呼叫都失败了吗?试图了解此处的内部情况。似乎内置的repr函数正在对实例的\uuuu repr\uuu函数的返回类型执行附加检查,如果它不是预期的str,则会引发错误,而直接调用的\uuuuu repr\uuuu函数与任何其他函数一样,可以返回任何值,\u

我是Python新手。我已经写了下面的代码--

当我运行此程序时,它会生成以下错误--


我在Python文档中读到,repr应该返回字符串,好了,明白了,那么为什么第一个print语句成功运行并打印了字典,第二个print生成了错误?不应该两个呼叫都失败了吗?试图了解此处的内部情况。

似乎内置的
repr
函数正在对实例的
\uuuu repr\uuu
函数的返回类型执行附加检查,如果它不是预期的
str
,则会引发错误,而直接调用的
\uuuuu repr\uuuu
函数与任何其他函数一样,可以返回任何值,
\uuuuuu repr\uuuu
不仅仅是一个普通方法,它是一个特殊的内置函数,看起来很像运算符。这些操作符提供的功能比任何方法都多


当您调用
c.\uu repr\uuu()
时,您正在调用方法部分。另一方面,当您调用
repr(c)
时,您已经调用了操作员。与
\uuuu添加\uuuu
运算符相同。它可以作为一个普通的方法调用
a.\uu add\uuuuuuuuu(b)
,也可以作为一个操作符(这需要更多的断言),比如
a+b

c.\uuuu repr\uuuuuuuuuuuuuuu()
只是一个任意的方法调用-它通常应该返回一个字符串,但不必返回。它恰好被
repr(c)
和其他需要字符串的部分所调用。该语言不能阻止您返回除
str
以外的其他内容,但这并不意味着如果您这样做,期望返回
str
的使用将继续正常工作。Python的动态类型系统无法强制执行此类协议;这取决于程序员的合作。
class AF:   
    def __repr__(self):
        return  {'name':1, 'age':44}

c = AF()        
print(c.__repr__())
print(repr(c))
{'name': 1, 'age': 44}
print(repr(c))
TypeError: __repr__ returned non-string (type dict)