it-swarm.com.de

Funktion aus einer Klasse in eine andere Datei importieren?

Ich schreibe ein Python-Programm zum Spaß, habe aber versucht, eine Funktion aus einer Klasse in eine andere Datei zu importieren. Hier ist mein 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()

Ich möchte eine Funktion namens run() aus einer Klasse in einer anderen Datei zurückgeben. Wenn ich die Datei importiere, führt sie zuerst die Klasse mit run() aus und führt dann den ursprünglichen Code aus. Warum passiert das? 

Hier ist der Code von 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()
54
Capkutay
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

Ändern Sie das Ende des Kommunikationssystems in:

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

Es sind die Zeilen, die immer ausgeführt werden, die dazu führen, dass sie sowohl beim Import als auch beim Ausführen ausgeführt werden.

82
agf
from FOLDER_NAME import FILENAME
from FILENAME import CLASS_NAME FUNCTION_NAME

FILENAME ist ohne das Suffix 

10
Alon Kogan

Wenn Sie wie ich ein Funktionspaket oder etwas erstellen möchten, das von den Benutzern heruntergeladen werden kann, ist dies sehr einfach. Schreiben Sie einfach Ihre Funktion in eine Python-Datei und speichern Sie sie unter dem gewünschten Namen in Ihrem PYTHON-Verzeichnis. Jetzt geben Sie in Ihrem Skript, in dem Sie dies verwenden möchten, Folgendes ein:

from FILE NAME import FUNCTION NAME

Hinweis - In den Teilen in Großbuchstaben geben Sie den Dateinamen und den Funktionsnamen ein.

Jetzt benutzen Sie einfach Ihre Funktion, so wie sie sein sollte.

Beispiel:

FUNCTION SCRIPT - unter C:\Python27 als function_choose.py gespeichert

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

SCRIPT MIT FUNKTION - wo immer gespeichert

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

AUSGANG IST HUND, KATZE, OR HUHN

Hoffen wir, dass dies geholfen hat, jetzt können Sie Funktionspakete zum Download erstellen!

-------------------------------- Dies ist für Python 2.7 ------------- ------------------------

4
James Hood

Zuerst müssen Sie sicherstellen, dass sich beide Dateien im selben Arbeitsverzeichnis befinden. Als Nächstes können Sie die gesamte Datei importieren. Zum Beispiel,

import myClass

oder Sie können die gesamte Klasse und die gesamten Funktionen aus der Datei importieren. Zum Beispiel,

from myClass import

Schließlich müssen Sie eine Instanz der Klasse aus der Originaldatei erstellen und die Instanzobjekte aufrufen.

Es wäre wirklich hilfreich, wenn Sie den Code einfügen würden, der nicht funktioniert (aus der 'anderen' Datei), aber ich vermute, Sie könnten mit einer gesunden Dosis der 'eval'-Funktion tun, was Sie wollen.

Zum Beispiel:

def run():
    print "this does nothing"

def chooser():
    return "run"

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

Der Wähler gibt den Namen der auszuführenden Funktion zurück, eval wandelt dann eine Zeichenfolge in tatsächlichen Code um, der direkt ausgeführt werden soll, und die Klammern beenden den Funktionsaufruf.

0
mikebabcock