2015-10-13 5 views
1

Я стараюсь придерживаться правил кодирования PEP8. У меня есть пакет под названием main. Внутри пакета есть модуль под названием time, который имеет класс под названием Time внутри. Теперь у меня есть немного проблем с поиском подходящего имени для моего фактического экземпляра, потому что time, который обычно был моим выбором, уже был взят модулем, и, похоже, это столкновение имен, если я назову его таким образом.Как назвать переменные экземпляра в Python?

from main.time import Time 

time = Time() 
... 
if time.status == main.time.STOPPED 

Возможно также разместил константу в неправильном модуле, но я подумал, что было бы лучше, чтобы мои постоянные в том месте, где они принадлежат. Это константа, используемая в моем классе Time (и модуле main), поэтому я могу убедиться, что я не смешиваю ее с другой константой, называемой STOPPED, используемой для перемещения игрока. К сожалению, я получаю AttributeError: 'function' object has no attribute 'time'.

Какое будет лучшее решение? Переименуйте константы в TIME_STOPPED и PLAYER_STOPPED и поместите их в модуль констант? Именование моей переменной экземпляра my_time или time_ или что-то вроде этого не совсем то, что я хотел бы сделать. Что такое питоновский путь?

+1

не понимающий. пожалуйста, укажите полный код и трассировку – Pynchia

+0

Ваша проблема в том, что у вас нет доступа к 'STOPPED', конечно? Я думаю, что вы хотите 'from main.time import Time, STOPPED'. Вы также можете сделать это атрибутом класса «Время», поэтому тест станет «if time.status == Time.STOPPED:', что еще больше уменьшит двусмысленность с версией игрока «STOPPED». – jonrsharpe

+0

Попробуйте добавить такой импорт: 'import main.time' –

ответ

3

Использование названия time - это плохой выбор для начала, а не только потому, что у вас уже есть модуль с именем time, но также и потому, что существует стандартный библиотечный модуль с именем time.

В любом случае, это не ваша проблема (возможно, столкновение с модулем STL есть, но вы не показываете достаточно кода). Ошибка AttributeError: 'function' object has no attribute 'time' означает, что mainmain.time) является функцией , а не модулем. Ваша строка time = Time() не является причиной этого, но еще одна функция с именем main внутри исполняемого файла.

+0

'main.time' должен быть импортированным модулем. Я думал, что nameclash находится между этим ('main.time.STOPPED') и экземпляром' time' моего объекта Time. В любом случае, хорошая точка там, поэтому я переименовал модуль в 'gametime' и класс в GameTime. , Тем не менее проблема остается прежней, если я использую 'gametime = GameTime()'. Каковы ваши имена для экземпляров. Может быть, я должен использовать gametime_instance или game_time, чтобы избежать nameclash ... –

+0

@ freeDom- Я могу только повторить, что ваше именование экземпляра 'Time' или' GameTime' сомнительно, но * не * проблема. У вас есть * функция *, называемая 'main' в области вашего приложения, которая затеняет модуль' main'. – MisterMiyagi

+0

Ох .. Так это тот? Да, внутри моего модуля '__init__' есть функция' main'. Может быть, имя модуля 'main' тоже очень плохая идея ... –