2013-04-03 2 views
3

Пожалуйста, обратите внимание следующие модули Python выдержки:модуль и объект Python имена конфликтовать

foo.py:

class Foo: 
    (...) 

bar.py:

import foo 

foo = foo.Foo() 

переменная Foo, который был объект модуля, перезаписывается объектом Foo.

Я знаю, что я могу использовать другие имена для объекта, например .:

foobar = foo.Foo() 

но семантический имеет больше смысла в моем коде, чтобы он называется Foo, так как это будет единственным экземпляром.

(я пытался обойти это путем сбрасывания классов и использовать только модули, но я вернулся к использованию классов, потому что с помощью модулей было только «грубости» проблемы.)

Это своего рода философский вопрос, но что является «правильным» способом обращения с этим потенциальным конфликтом имен объектов/модулей?

+0

Я не думаю, что для всех модулей есть один правильный путь - это действительно зависит от имени модуля. Как указывает @ F.J, вы можете импортировать его как нечто другое, но я бы скорее изменил имя переменной. Каковы имена модулей и классов в вашем конкретном случае? –

+0

Имена модулей/классов - это камера, сеть, gpio, база данных и т. Д. –

+0

Да, я вижу, как вы хотите назвать 'camera.Camera()' instance' camera'. Возможно, просто импортируйте имена классов, а не целые модули, как в «из камеры импорта камеры»? Затем вы можете безопасно использовать 'camera' в качестве вашего имени переменной. –

ответ

6

На мой взгляд, нет ничего плохого в том, что вы сейчас делаете, но, чтобы сделать его более понятным для каждого чтения кода я предложил бы изменить свой код, чтобы что-то вроде следующего:

import foo as foo_mod 

foo = foo_mod.Foo() 

или в качестве альтернативы :

from foo import Foo 

foo = Foo() 

Это предотвращает столкновение имя так будет более очевидным, что в вашем модуле переменная foo не будет ссылаться на модуль того же имени.

+0

Спасибо, я не знал об этой альтернативе переименованию модуля. –

Смежные вопросы