Klasse importiren und aufrufen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
infineon
User
Beiträge: 2
Registriert: Freitag 6. Oktober 2017, 17:11

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
Sirius3
User
Beiträge: 17738
Registriert: Sonntag 21. Oktober 2012, 17:20

@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?
infineon
User
Beiträge: 2
Registriert: Freitag 6. Oktober 2017, 17:11

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
__deets__
User
Beiträge: 14527
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Antworten