isinstance поведение с перезагрузкой модуля

Учитывая следующие два файла .py:

aclass.py

class A(object): pass 

main.py

 def importer(klass): """ Used to import classes from there python qalname """ import_ = lambda m, k: getattr(__import__(m, fromlist=k), k) klass = klass.split('.') module = '.'.join(klass[:-1]) klass = klass[-1] return import_(module, klass) from aclass import A import_A = importer('aclass.A') print isinstance(A(), import_A) # Expected to be true print isinstance(import_A(), A) # Expected to be true 

На этом этапе все работает нормально (моя программа печатает True\nTrue ). Но если я модифицирую метод importer для принудительной перезагрузки, то есть:

эта строка:

  import_ = lambda m, k: getattr(__import__(m, fromlist=k), k) 

заменяется на:

  import_ = lambda m, k: getattr(reload(__import__(m, fromlist=k)), k) 

мои программы возвращаются

 False False 

И я не понимаю этого поведения.

One Solution collect form web for “isinstance поведение с перезагрузкой модуля”

Перезагрузка модуля означает повторное выполнение его содержимого, в этом случае class A(object): pass . Поэтому он создает другой класс. Это то же поведение, что и:

 class A(object): pass a = A() class A(object): # a different class pass print isinstance(a, A) # False 

Этого должно быть достаточно, чтобы объяснить, почему голая reload() обычно плохая идея. Я уверен, что другие могут указать на структуры, которые реализуют более сложные процедуры перезагрузки, например, исправление старого класса, которое будет считаться равным новому.

  • Как проверить, является ли ввод строкой или int в Python 2.x?
  • isinstance of bool?
  • Отрицательная форма isinstance () в Python
  • Создание «isinstance» работы с декораторами
  • «Протоколы нельзя использовать с isinstance ()» - почему бы и нет?
  • Странное поведение функции isinstance
  •  
    Interesting Posts for Van-Lav

    Как разбить список и передать их как отдельный параметр?

    Как импортировать пакет с помощью __import __ (), когда имя пакета известно только во время выполнения?

    сопоставить цветную панель с матричным графом

    plugins pattern + sub command

    Как использовать PIL для изменения размера и применения данных EXIF ​​в файл?

    Что делать, если я не закрываю соединение с базой данных в Python SQLite

    Хранение pandas DataFrames в моделях SQLAlchemy

    Как назначить / обновить подмножество общей переменной тензора в Theano?

    как ссылаться на пакет python, когда имя файла содержит период

    Python: как сделать кросс-модульную переменную?

    Flask-WTF Значение поля File исчезает после неудачной отправки

    TensorFlow freeze_graph.py: имя «save / Const: 0» относится к тензору, который не существует

    Как отлаживать скрипты с использованием eclipse и pydev?

    Asyncio RuntimeError: цикл событий закрыт

    Получение AttributeError при попытке создать таблицу DynamoDB с глобальным индексом с помощью boto v2.25.0

    Python - лучший язык программирования в мире.