gpt4 book ai didi

python - 什么时候 str 不是 str?

转载 作者:太空宇宙 更新时间:2023-11-04 04:59:22 25 4
gpt4 key购买 nike

我在 Python3 中遇到一个问题 str不是 str .我正在完成一个 2to3 项目,但由于第三方类中的类型检查而失败。对于它的值(value),这在 Python 2 下没有发生。以下示例没有错误,但与我的问题类似:

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 ,但我确实知道以下内容:

  • 我正在通过 str进入 TheirClass.name 的构造函数
  • 外面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在他们的代码中,我能够看到 id(str) != id(type(name))
  • idname对象在两次方法调用之间没有变化

据我所知,没有人重新定义 isinstancestr .但是 idstr 是否TheirClass 的外部构造函数更改到里面。

最佳答案

最后的线索是 strid 改变了。虽然没有 strdef str 的分配,但有一个导入。具体来说:

from past.builtins import str

关于python - 什么时候 str 不是 str?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46180499/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com