我有一段代码
1. b = u'\xe6' #type: unicode
2. c = str(b) #type: str
3. d = c #type: str
我在mypy中使用python 2标志运行它。
我的期望是第2行应该有错误。str(b)返回类型unicode,而c的期望类型为str,因此应该存在类型不兼容的问题。但是没有抛出错误。
另一方面,如果我明确地做过
1. b = u'\xe6' #type: unicode
2. c = str(b) #type: unicode
3. d = c #type: str
然后第3行出现错误,说明无法将unicode分配给str,这在某种程度上是可以预期的。
所以问题在于我对str()的理解,str()是否应该返回与其输入相同的类型?还是隐式将所有内容都强制转换为str,如果是,则第二个示例中的第2行而不是第3行不应有错误。
根据当前行为,str()采用为其分配的变量的类型。
str
返回类型为str
的对象。在极少数情况下,它可能返回str
子类的实例,但绝对不会返回您传入的任何类型的对象。
第2行通过代码段2中的类型检查,因为mypy的specific special case表示str
与Python 2上的unicode
兼容,反之亦然。