Seite 1 von 1

Klasse importiren und aufrufen

Verfasst: Freitag 6. Oktober 2017, 17:19
von infineon
Guten Nachmittag,

Ich nutzte Python erst seit kurzem aber habe ein Problem eine Klasse aufzurufen bzw. diese zu für diesen zweck zu Importieren.

Ich habe eine Klasse village.py von der aus ich aber gerne in die Klasse retailer,py gehen möchte denn ich muss die dortige State-Machine aufrufen.

Wenn ich in der village.py die Klasse importiere und ein Objekt erstelle:

Code: Alles auswählen

from retailer import Retailer


#STATES
START, LIST, CHOOSE, SAVE, QUIT = range(5)

class Start(State):
    def run(self, gamedata):
        print("Welcome {0} in the village!!".format(gamedata.player.name))
        return LIST,gamedata

    def next(self, next_state):
        if next_state == LIST:
            return dorf.list

class Choose(State):
    def run(self, gamedata):
        eingabe = input(">> ")
        if eingabe == "0":
            # DUNGEON
            return (LIST, gamedata)
        elif eingabe == "1":
            # INVENTORY
            return (LIST, gamedata)

        elif eingabe == "2":
            verkaufer = Retailer(gamedata)                 HIER WIRD DAS OBJEKT ERSTELLT
            verkaufer.run()                                          HIER STARTE ICH DIE STATEMACHINE DER ANDEREN KLASSE


class dorf (StateHandler):
    def __init__(self, gamedata):
        StateHandler.__init__(self, dorf.start,..............

Es kommt immer nur dieser Fehler:

Code: Alles auswählen

ImportError: cannot import name 'Retailer'
Was muss ich beachten??? DANKE

Re: Klasse importiren und aufrufen

Verfasst: Freitag 6. Oktober 2017, 18:38
von Sirius3
@infineon: in der Datei retailer.py wird der Name Retailer nicht definiert. Wie sieht retailer.py aus? Und gibt es vielleicht mehrere Dateien mit diesem Namen in unterschiedlichen Verzeichnissen?

Re: Klasse importiren und aufrufen

Verfasst: Samstag 7. Oktober 2017, 10:57
von infineon
Also in die Klasse retailer.py wird so definiert:

Code: Alles auswählen

class Retailer(StateHandler):
    def __init__(self, gamedata):
        StateHandler.__init__(self, Retailer.start,
                              [Retailer.start, Retailer.list, Retailer.choose, Retailer.save, Retailer.quit],
                              Quit(), gamedata)
es gibt nichts, dass sonst noch so heißt


Das hier wäre die village.py Klasse von der aus ich die retailer.py Klasse aufrufe:
https://pastebin.com/JhHy29pr

Re: Klasse importiren und aufrufen

Verfasst: Samstag 7. Oktober 2017, 11:45
von __deets__
Mach mal “import retailer; print(retailer.__path__)” bzw __file__ falls __path__ nicht existiert. Klingt so als ob du nicht importierst was du glaubst zu importieren.