【发布时间】:2019-10-05 06:52:42
【问题描述】:
我正在尝试从一个文件中导入一个类并检查它是否是该类在定义它的文件中的一个实例。问题是它没有从isinstance() 函数返回True,而是返回False,因为它是在不同的文件中初始化的。
这是一个工作示例。
假设你有file1.py:
class Foo:
def __init__(self, arg1):
self.arg1 = arg1
def main(class_obj):
# Prints false and is type <class 'file1.Foo'>
print(type(class_obj))
print(isinstance(class_obj, Foo))
if __name__ == '__main__':
from file2 import get_class
main(get_class())
还有file2.py:
from file1 import Foo
def get_class():
foo = Foo("argument")
return foo
它打印False,类型为<class 'file1.Foo'>。我发现有趣的是,如果你在定义 is 的 file1 中初始化 Foo 类,它会返回 True。
# Add to main() function in file1
# Returns true and is type <class '__main__.Foo'>
foo_local = Foo("argument") # Class initiated in __main__ seems to work
print(type(foo_local))
print(isinstance(foo_local, Foo))
我发现,如果您在定义它的文件之外启动一个类,它与您在定义它的文件内启动该类是不同的“类”。
# Different Classes?
<class 'file1.Foo'> # From other file (`file2.py`)
<class '__main__.Foo'> # From same file (`file1.py`)
所以我的问题是:
我该如何解决这个问题,以便即使在file1 之外启动的类也可以在isinstance() 函数上返回True?要改写它,我怎样才能使Foo 类与file1.py 和file2.py 中的“相同”?如果重要的话,我是 Python 3.6.7。
【问题讨论】:
-
在询问与 python 相关的问题时始终使用 [python] 通用标签。自行决定使用特定于版本的标签。
标签: python python-3.x class python-import isinstance