Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Importing a function from a class in another file?

I'm writing a Python program for fun but got stuck trying to import a function from a class in another file. Here is my code:

#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() 

I want to return a function called run() from a class in another file. When I import the file, it first runs the class with run() in it, then proceeds to run the original code. Why does this happen?

Here is the code from 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's part. You must locate the"     print "the file and contact the rescue team before the dinosaurs"     print "surround the visitor's 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() 
like image 440
Capkutay Avatar asked Jul 20 '11 04:07

Capkutay


People also ask

How do I use a function from another file?

To use the functions written in one file inside another file include the import line, from filename import function_name . Note that although the file name must contain a . py extension, . py is not used as part of the filename during import.

How do I import a function into a different folder?

The most Pythonic way to import a module from another folder is to place an empty file named __init__.py into that folder and use the relative path with the dot notation.

How do you inherit a class from another file in Python?

To create a class that inherits from another class, after the class name you'll put parentheses and then list any classes that your class inherits from. In a function definition, parentheses after the function name represent arguments that the function accepts.


1 Answers

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 

Change the end of comm system to:

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

It's those lines being always run that are causing it to be run when imported as well as when executed.

like image 68
agf Avatar answered Oct 13 '22 23:10

agf