Skip to content

Instantly share code, notes, and snippets.

@idlesign
Created September 18, 2014 04:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save idlesign/f296bbc27e850631204e to your computer and use it in GitHub Desktop.
Save idlesign/f296bbc27e850631204e to your computer and use it in GitHub Desktop.
pythonz. Тестируем влияние импорта на проверки идентичности классов.
#!/usr/bin/env python3
'''
Тестируем влияние импорта на проверки идентичности классов.
* Создать директорию `imptest`.
* Переместиться в директорию `imptest`
* В директории `imptest` создать пустой файл `__init__.py`.
* В директории `imptest` создать файл `test.py`, поместить в него этот код.
* В директории `imptest` создать файл `class_a.py`.
* Поместить в `class_a.py` следующий код:
class A(object):
pass
* Запустить `test.py`
> python3 test.py
* Изучить результат.
'''
import sys
from os import path
sys.path.insert(0, path.dirname(path.dirname(path.realpath(__file__))))
from class_a import A
from imptest.class_a import A as AA
print('\nИмпортируем один и тот же класс разными способами:')
print('from class_a import A')
print('from imptest.class_a import A as AA')
print()
print('A==A --> %s' % (A==A))
print('AA==A --> %s' % (AA==A))
print('isinstance(AA(), A) --> %s' % isinstance(AA(), A))
print('\nПроход по атрибутам:')
for attr in dir(A):
if attr == '__dict__':
continue
val_a, val_aa = getattr(A, attr), getattr(AA, attr)
if val_a != val_aa:
print(' Разл.: %s' % attr)
if isinstance(val_a, str):
print(' "%s" VS "%s"' % (val_a, val_aa))
print('\nПроход по sys.modules:')
for mod_name in sys.modules.keys():
if mod_name.find('class_a') > -1:
print(' Найден %s' % mod_name)
print('\nБудьте последовательны в вопросах импорта.')
print('Да и в прочих тоже.')
print()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment