Подтвердить что ты не робот

Импортировать функцию из класса в другой файл?

Я пишу программу Python для удовольствия, но застрял, пытаясь импортировать функцию из класса в другой файл. Вот мой код:

#jurassic park mainframe

from random import randint
from sys import exit
from comm_system import Comm_system #the file i want to import from



class Jpark_mainframe(object):
    def mainframe_home(self):
    print "=====Welcome to the Jurassic Park Mainframe====="
    print "==========Security Administration==============="
    print "===========Communications Systems==============="
    print "===============System Settings=================="
    print "===================Quit========================="

    prompt = raw_input("What would you like to do? ")

    while prompt != "Quit":

        if prompt == "Security Administration":
            print "Please enter the 5-digit passcode:"
            security_passcode = "%d%d%d%d%d" % (2, 0, 1, 2, randint(1, 2))
            security_guess = raw_input(": ")
            security_guesses = 0

            while security_guess != security_passcode and security_guesses < 7:
                print "Incorrect. Please enter the security passcode."
                security_guesses += 1
                security_guess = raw_input(": ")

                if security_guess == security_passcode:
                    print "=========Security Administration======="
                    print "Area 1 Fences: Off"
                    print "Area 2 Fences: On"
                    print "Area 3 Fences: Off"
                    print "Velociraptor Compound: Off"
                    print "Lobby Security System: Off"
                    print "Entrance Facility System: Off"
                    print "To enable all systems, enter 'On'"


                    enable_security = raw_input(": ")

                    if enable_security == "On":
                        print "Systems Online."


        if prompt == "System Settings":
            print "You do not have access to system settings."
            exit(0)


        if prompt == "Communications Systems":
            print "===========Communications Systems==========="
            print "error: 'comm_link' missing in directories"
            exit(0)
            return Comm_system.run #this is where I want to return the 
                                                   #the other file

the_game = jpark_mainframe()
the_game.mainframe_home()

Я хочу вернуть функцию под названием run() из класса в другой файл. Когда я импортирую файл, он сначала запускает класс с run() в нем, затем переходит к запуску исходного кода. Почему это происходит?

Вот код из comm_system:

#communication systems


from sys import exit

class Comm_system(object):
def run(self):

    comm_directory = ["net_link", "tsfa_run", "j_link"]
    print "When the system rebooted, some files necessary for"
    print "communicating with the mainland got lost in the directory."
    print "The files were poorly labeled as a result of sloppy"
    print "programming on the staff part. You must locate the"
    print "the file and contact the rescue team before the dinosaurs"
    print "surround the visitor center. You were also notified the"
    print "generators were shorting out, and the mainframe will lose"
    print "power at any moment. Which directory will you search in?"
    print "you don't have much time! Option 1: cd /comm_sys/file"
    print "Option 2: cd /comm_sys/dis"
    print "Option 3: cd /comm_sys/comm"

    dir_choice = raw_input("jpark_edwin$ ")

    if dir_choice == "/comm_sys/file" or dir_choice == "/comm_sys/dis":
        print "misc.txt" 
        print "You couldn't locate the file!"
        print "The system lost power and your computer shut down on you!"
        print "You will not be able to reach the mainland until the system"
        print "comes back online, and it will be too late by then."
        return 'death'

    if dir_choice == "/comm_sys/comm":
        comm_directory.append("comm_link")
        print comm_directory
        print "You found the right file and activated it!"
        print "Just in time too, because the computers shut down on you."
        print "The phonelines are radios are still online."
        print "You and the other survivors quickly call the mainlane"
        print "and help is on the way. You all run to the roof and wait"
        print "until the helocopter picks you up. You win!"
a_game = Comm_system()
a_game.run()
4b9b3361

Ответ 1

from otherfile import TheClass
theclass = TheClass()
# if you want to return the output of run
return theclass.run()  
# if you want to return run itself to be used later
return theclass.run

Измените конец системы компиляции на:

if __name__ == '__main__':
    a_game = Comm_system()
    a_game.run()

Это те строки, которые всегда запускаются, которые заставляют его запускаться при импорте, а также при его выполнении.

Ответ 2

from FOLDER_NAME import FILENAME
from FILENAME import CLASS_NAME FUNCTION_NAME

FILENAME не имеет суффикса

Ответ 3

Если, как и я, вы хотите создать пакет функций или что-то, что люди могут скачать, тогда это очень просто. Просто напишите свою функцию в файле python и сохраните ее как имя, которое вы хотите в своем питонном каталоге. Теперь, в вашем script, где вы хотите использовать это, вы вводите:

from FILE NAME import FUNCTION NAME

Примечание. Заглавные буквы - это то, где вы вводите имя файла и имя функции.

Теперь вы просто используете свою функцию, но это должно было быть.

Пример:

FUNCTION script - сохранен в C:\Python27 как function_choose.py

def choose(a):
  from random import randint
  b = randint(0, len(a) - 1)
  c = a[b]
  return(c)

SCRIPT ИСПОЛЬЗОВАНИЕ ФУНКЦИИ - сохраняется везде

from function_choose import choose
list_a = ["dog", "cat", "chicken"]
print(choose(list_a))

ВЫХОД БУДЕТ СОБАК, КОТ ИЛИ ЦЫПЛЕНОК

Это помогло, теперь вы можете создавать пакеты функций для загрузки!

-------------------------------- Это для Python 2.7 ---------- ---------------------------

Ответ 4

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

import myClass

или вы можете импортировать весь класс и целые функции из файла. Например,

from myClass import

Наконец, вам нужно создать экземпляр класса из исходного файла и вызвать объекты экземпляра.

Ответ 5

Это действительно поможет, если вы включите код, который не работает (из "другого" файла), но я подозреваю, что вы можете делать то, что хотите, со здоровой дозой функции "eval".

Например:

def run():
    print "this does nothing"

def chooser():
    return "run"

def main():
    '''works just like:
    run()'''
    eval(chooser())()

Выбирает имя функции для выполнения, eval затем превращает строку в фактический код, который будет выполнен на месте, а круглые скобки завершают вызов функции.