Я пытаюсь импортировать класс из одного файла и проверить, является ли экземпляр этого класса в файле, в котором он был определен. Проблема в том, что вместо возврата True
из функции isinstance()
он возвращает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'>
.Что мне показалось интересным, так это то, что если вы инициализируете класс Foo
в file1
, где он был определен, он возвращает 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
, могли возвращать True
в isinstance()
функция?Иными словами, как я могу сделать так, чтобы класс Foo
был «одинаковым» в file1.py
и file2.py
?Я Python 3.6.7, если это имеет значение.