gpt4 book ai didi

Python - isinstance() 没有像我预期的那样工作

转载 作者:行者123 更新时间:2023-12-03 16:40:46 25 4
gpt4 key购买 nike

我有一个名为 Route 的类(具有自己的 __repr__() 函数),以及一个名为 default_route 的 Route 实例。但是,如果我调用 isinstance(default_route,Route),它会意外返回 False,即:

[Dbg]>>> default_route
Route(office(235)=323-654-3242)
[Dbg]>>> isinstance(default_route,Route)
False
[Dbg]>>> default_route.__class__
<class 'route.Route'>
[Dbg]>>> Route
<class 'route.Route'>
[Dbg]>>> type(default_route)
<class 'route.Route'>
[Dbg]>>> type(default_route) is Route
False

类定义非常简单明了:
class Route(object):
def __init__(self, phone, condition=None):
self.phone=phone
self.condition=condition
self.choice_name=None

我对此感到困惑;为什么 isinstance() 不会在上面返回 True ?

最佳答案

如果您执行以下操作,这很容易发生:

  • import route并创建 default_route使用 route.Route
  • 调用 reload(route)对模块进行一些代码更改(或者只是为了好玩;不管模块是否不变,reload 仍然会重新加载它)

  • 如果 default_route,您可能会以类似的方式遇到这种情况。也在 route 中定义,你做了 from route import Route ,然后 reload -ed route ,然后是 from route import default_route (导入 Routedefault_route 的顺序无关紧要,只要它们之间发生了 reload,并且没有重新导入旧的)。无论哪种方式,您都有一个来自不同版本的模块的实例和一个类;它们可能看起来相同,具有相同的行为等,但它们不是同一个模块,因此也不是相同的类、实例等。

    无论哪种情况,快速检查都是调用 default_route.__class__ is Route ;如果计算结果为 True ,你可能有一些奇怪的 ABC基于 a broken __subclasshook__ 的类, 但更有可能评估为 False ,表明这两个类,尽管名称匹配,但实际上源自模块的独立加载。

    关于Python - isinstance() 没有像我预期的那样工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50478661/

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