При проверке идентичности объекта я получаю ошибки утверждения, потому что код создания объекта импортирует модуль определения объекта под одной нотацией (base.other_stuff.BarCode
), а код проверки идентичности импортирует тот же модуль под другой нотацией (other_stuff.BarCode
). (Пожалуйста, смотрите подробности ниже.)
Кажется, что вызов isinstance () связан с ссылками на модуль определения объекта и хочет импортировать его в точно такой же записи. (Я использую версию 2.5.)
Полагаю, это можно исправить, изменив нотацию импорта в коде, проверяющем идентичность, но я боюсь, что просто распространю ту же проблему на другой код, который зависит от нее. И я уверен, что есть более элегантное решение, которое я, вероятно, должен использовать в первую очередь.
Так как мне это исправить?
ОПИСАНИЕ
PythonPath: '/', '/ base /'
Файлы:
/__init__.py
base/__init__.py
base/other_stuff/__init__.py
base/other_stuff/BarCode.py
base/stuff/__init__.py
camp/__init__.py
Текст базы / stuff / FooCode.py:
import other_stuff.BarCode as bc
class Foo:
def __init__(self, barThing):
assert isinstance(barThing, bc.Bar)
Текст лагеря / new_code.py:
import base.stuff.FooCode as fc
import base.other_stuff.BarCode as bc
thisBar = bc.Bar()
assert isinstance(thisBar, bc.Bar)
thisFoo = fc.Foo(barThing=thisBar)
Это не удалось. Он выдерживает проверку утверждения, но взрывается в утверждении в исходном коде.
Однако, это работает, когда я изменяю new_code для импорта BarCode.py с:
import other_stuff.BarCode as bc
. , , потому что и base /, и base / other_stuff находятся в PythonPath.