我有一个名为Route的类(有它自己的uRepr_Uu()函数),还有一个名为default_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
类定义非常简单明了:
^{pr2}$我对此感到困惑;为什么上面的isinstance()不能返回True?在
如果您执行以下操作,则很容易发生这种情况:
import route
并使用route.Route
创建{reload(route)
将一些代码更改拉入模块(或者只是为了好玩;如果模块没有更改,reload
仍将重新加载它)如果}(导入顺序}无关,只要
default_route
在route
中也定义了from route import Route
,然后reload
-edroute
,那么{Route
和{reload
发生在它们之间,而较早的一个不被重新导入)。不管是哪种方式,您都有一个实例和一个来自不同版本模块的类;它们可能看起来相同,具有相同的行为等,但它们不是同一个模块,因此也不是相同的类、实例等无论哪种情况,快速检查都是调用
default_route.__class__ is Route
;如果结果是True
,那么可能有一些奇怪的基于ABC
的类,带有{a1},但更有可能的是它的计算结果是False
,这表明尽管名称匹配,这两个类实际上都来自于模块的独立加载。在我很确定这是我使用的调试器(Pythonwin)的问题;无论我在调试器的那个实例中重新加载和重新运行代码多少次,问题都是完全稳定的,而且,由于我正在调试我的代码,下一步该怎么办,我很困惑。但是,考虑到上面关于重新加载的一些评论,我开始怀疑调试环境本身可能有问题,所以我关闭了程序,重新打开它,突然问题就不再是可重现的了。在
很抱歉打扰了所有人,但至少如果有人看到同样的问题,也许这会让他们意识到他们不是疯了,Python本身并没有以某种微妙的方式被破坏!在
相关问题 更多 >
编程相关推荐