我在Python3中遇到了一个问题,其中str
不是str
。我正在做一个2to3项目,由于在第三方类中进行类型检查而失败。值得一提的是,这在python2下并没有发生。以下示例没有错误,但与我的问题类似:
class TheirClass():
# I don't love that they're using `id` here, but they are
def __init__(self, name, id=None):
if isinstance(name, str):
self.name = name
else:
raise TypeError('name is not a str')
my_object = TheirClass('a name')
print('Yep that worked')
我还不能将其简化为MCVE
,但我知道以下几点:
TheirClass.__init__
isinstance(name, str) == True
TheirClass.__init__
isinstance(name, str) == False
TheirClass.__init__
type(name)
内返回<class str>
TheirClass.__init__
dir(name) == dir(str)
inspect.getmro
报告我的伪str没有__mro__
id
之后,我看到{name
对象的id
不会发生变化据我所知,没有人会重新定义isinstance
或{str
的id
确实从TheirClass
的外部构造函数变为它的内部构造函数。在
最后的线索是
str
的id
发生了变化。当没有str
或def str
赋值时,有一个导入。具体来说:相关问题 更多 >
编程相关推荐