Methode einer Klasse in einem separaten Modul aufrufen, geht das?
Verfasst: Freitag 16. November 2018, 21:58
Hallo zusammen,
ich bin noch nicht tief drin in der Python Welt und habe in Zukunft vor ein größeres Projekt, das ich mit AutoIT geschrieben habe, in Python umzusetzen.
In meinem AutoIT Script habe ich sehr viele Funktionen in unterschiedliche Dateien ausgegliedert um die Übersichtlichkeit zu steigern (zb. eine Datei für meine GUI, eine für Berechnung, etc. - entsprechend nach Themen gegliedert).
Eine solche Aufteilung meiner Funktionen würde ich auch gerne in Python übernehmen, damit ich nicht hinterher eine große Datei mit tausend Zeilen habe.
Dazu habe ich schon herrausgelesen das soetwas ein "Modul" in Python ist?
Da ich jetzt in Python auch mit Klassen/Objekten programmieren kann, würde ich das ganze selbstverständlich auch lernen.
Das ist meine Ausgangssituation.
Aber schon jetzt bin ich auf ein Problem gestoßen, dass mein altes Denken wohl komplett umstricken muss.
Ich hoffe ihr könnt mir helfen.
Wieso kann ich, obwohl ich mein Objekt "obj" bereits erstellt habe, über "Modul.ModulClassTest()" nicht auf das Objekt zugreifen?
Wenn ich meine "klassen_test.py" ausführe, erhalte ich folgende Ausgabe:
Vielen Dank schon mal für eure Hilfe.
Bitte schaut euch meine drei zum Testen erstellten Dateien an.
VG
borsTiHD
/klassen_test.py:
/includes/test/Class.py:
/includes/test/Modul.py:
ich bin noch nicht tief drin in der Python Welt und habe in Zukunft vor ein größeres Projekt, das ich mit AutoIT geschrieben habe, in Python umzusetzen.
In meinem AutoIT Script habe ich sehr viele Funktionen in unterschiedliche Dateien ausgegliedert um die Übersichtlichkeit zu steigern (zb. eine Datei für meine GUI, eine für Berechnung, etc. - entsprechend nach Themen gegliedert).
Eine solche Aufteilung meiner Funktionen würde ich auch gerne in Python übernehmen, damit ich nicht hinterher eine große Datei mit tausend Zeilen habe.
Dazu habe ich schon herrausgelesen das soetwas ein "Modul" in Python ist?
Da ich jetzt in Python auch mit Klassen/Objekten programmieren kann, würde ich das ganze selbstverständlich auch lernen.
Das ist meine Ausgangssituation.
Aber schon jetzt bin ich auf ein Problem gestoßen, dass mein altes Denken wohl komplett umstricken muss.
Ich hoffe ihr könnt mir helfen.
Wieso kann ich, obwohl ich mein Objekt "obj" bereits erstellt habe, über "Modul.ModulClassTest()" nicht auf das Objekt zugreifen?
Wenn ich meine "klassen_test.py" ausführe, erhalte ich folgende Ausgabe:
Traceback (most recent call last):
File "D:\Stuff\Python\klassen_test.py", line 27, in <module>
test.py wird ausgef�hrt
hello, ich bin ein weiterer test...
Obj - obj.VAR_TEST: Ich bin ein Test String.
Ich bin eine Test Methode der Klasse 'Class'.
Ich bin eine Test Funktion vom Modul 'Modul'.
Modul.ModulClassTest()
File "D:\Stuff\Python\includes\test\Modul.py", line 8, in ModulClassTest
print("Modul Test um Variable der Klasse auszulesen - obj.VAR_TEST: " + obj.VAR_TEST)
NameError: name 'obj' is not defined
[Finished in 0.093s]
Vielen Dank schon mal für eure Hilfe.
Bitte schaut euch meine drei zum Testen erstellten Dateien an.
VG
borsTiHD
/klassen_test.py:
Code: Alles auswählen
# coding: utf-8
# Bibliotheken
from includes.test import Class
from includes.test import Modul
def test():
print("hello, ich bin ein weiterer test...")
return True
# Main Function
if __name__ == '__main__':
print("test.py wird ausgeführt")
test()
# Erstellt ein Test Objekt und gibt die vom Konstruktor erstellte Variable aus
obj = Class.Class()
print("Obj - obj.VAR_TEST: " + obj.VAR_TEST)
# Methode von Class wird aufgerufen
obj.Print()
# Funktion aus einem Modul wird aufgerufen
Modul.ModulFunc1()
# Prüft ob auf eine Klasse in meinem Modul zugegriffen werden kann
Modul.ModulClassTest()
Code: Alles auswählen
class Class:
def __init__(self):
""" Konstruktor """
self.__main()
def __main(self):
""" Test Variablen """
self.VAR_TEST = "Ich bin ein Test String."
self.VAR_TEST2 = "Zweiter Test."
def Print(self):
""" Test Methode """
print("Ich bin eine Test Methode der Klasse 'Class'.")
# Main Function - Wird ausgeführt, wenn die *.py nicht importiert, sondern direkt ausgeführt wurde
if __name__ == '__main__':
# Bibliothek wurde nicht importiert
print("Hinweis: Bibliothek importieren und nicht direkt ausführen.")
/includes/test/Modul.py:
Code: Alles auswählen
def ModulFunc1():
""" Test Methode """
print("Ich bin eine Test Funktion vom Modul 'Modul'.")
def ModulClassTest():
""" Test Methode """
print("Modul Test um Variable der Klasse auszulesen - obj.VAR_TEST: " + obj.VAR_TEST)