什么时候一个str不是str?

2024-10-01 02:20:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我在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或{}。但是strid确实TheirClass的外部构造函数变为它的内部构造函数。在


Tags: 项目nameselfid类型thatinitdir