2014-09-20 2 views
-2

Так что я очень новичок в Python и в программировании вообще. У меня возникла проблема с моей текстовой игрой. Я пытаюсь создать функцию (довольно уверен, что def (name) - это функция, правильно?) В .py, называемой 'locationMenu', и использовать ее в основном файле игры. Вот начало моего locationMenu.py (остальное просто печатает, а если/Элиф/иначе.Использование функций из других .py-файлов

from main import Engine, Hallway, Canteen, Bedroom, Room 

class locationsMenu(): 
    def locationMenu(self): 

и здесь есть место в моем главном файле игры, где я пытаюсь использовать «locationMenu» функция, что я только что создали.

locationMenu() 

это только одна строка после того как я сделал выбор с входом и т.д., но сейчас я хотел бы перейти к locationMenu, который находится в другом файле.

Любой помогите очень ценить. Пожалуйста, не используйте «большие слова», потому что, как я уже сказал, я все еще очень новичок в progr в целом.

+0

Попробуйте сохраняйте свои программы в одном файле («модуль»), когда вы начинаете. Поэкспериментируйте с пакетами и модулями позже! :) –

+0

вы назвали свой 'module',' class' и 'method' в классе' locationMenu'? Я не уверен, что это хорошая практика или нет. –

+0

И, кстати, это не ясно из вашего вопроса, но если вы пытаетесь вызвать 'locationMenu()' из 'main.py', а' locationMenu.py' также импортирует материал из 'main.py', то, вероятно, лучший способ структурирования вашего кода. Вот [хорошее обсуждение циклического импорта] (http://stackoverflow.com/questions/744373/circular-or-cyclic-imports-in-python). –

ответ

2

locationMenu() является метод экземпляра класса locationsMenu(), так что вам нужно создать экземпляр и вызвать метод на него, что-то вроде:

from locationMenu import locationsMenu 

my_menu = locationsMenu()  # Create a new object 
my_menu.locationMenu()   # Call its instance method 

Если вы просто попробовать locationsMenu.locationMenu() тогда вы d получить что-то вроде этой ошибки:

Traceback (most recent call last): 
    File "./prog.py", line 3, in <module> 
    locationsMenu.locationMenu() 
TypeError: locationMenu() missing 1 required positional argument: 'self' 

потому locationMenu() это не метод класса, и вы пытаетесь вызвать его в отсутствии locationsMenu объекта.

Если вы не хотите его внутри класса вообще, а затем сделать его регулярную функцию и сделать:

locationMenu.py:

from main import Engine, Hallway, Canteen, Bedroom, Room 

def locationMenu(): 
    print("In function locationMenu()") 

prog.py:

from locationMenu import locationMenu 

locationMenu() 
+0

Просто возвращает это: 'Traceback (самый последний вызов последнего): Файл "main.py", строка 12, в из locationMenu импорта locationsMenu Файл«A: \ Python Text Adventure Затмения Workspace \ Surface_tension \ locationMenu. ру», строка 1, в от основной импорт двигателя, Прихожая, столовая, спальня, комната файла "A: \ Python Text Adventure Затмения Workspace \ Surface_tension \ main.py", линь е 12, в от locationMenu импорт locationsMenu ImportError: не может импортировать имя «locationsMenu» Нажмите любую клавишу для продолжения .' @Paul Гриффитс –

+0

@ user4061908:.. Тогда есть либо что-то не так с вашей реализации, или другая проблема в коде, вы не показывая нам. –

+0

Должен ли я публиковать ** ВСЕ ** из файла main.py и locationMenu.py? Знаете ли я, что я, вероятно, внедрил это неправильно. @Paul Griffiths –

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