Python - Frage zu Klassen Methoden Objekten?
Hallo,
Ich habe eine kleines Problem mit Klassen bzw. dessen Objekten. Ich zeige mein Problem anhand eines kleinen Beispiels:
Initialisierung der Klasse:
class Test:
def __init__(self, test_objekt):
self.test-objekt = test_objekt
def test_methode(self)
print(self.test_objekt)
Die Klasse hat 3 Methoden die alle das test-objekt verwenden möchten.
Aber mir klappt die Übergabe von dem in __init__ initialisiertem test_objekt nicht auf die Methode. Wie muss ich es schreiben dass das self.test_objekt in der test_methode benutzt werden kann?
Aufruf der Klasse ist im Beispiel übertragen auf mein Problem:
Test.test_methode(test_objekt)
Vielleicht ist es besser einen Teil des echten Beispiels zu verwenden:
Das ist die Klasse wobei ich die Methode test zu testzwecken ergänzt habe
class Pfad_pruefen_erstellen:
def __init__(self, pfad):
self.pfad = pfad
def pruefen_und_erstellen(self):
if not os.path.exists(self.pfad):
print("Pfad wurde erstellt: " + str(self.pfad))
os.makedirs(self.pfad)
elif os.path.exists(self.pfad):
print("Pfad ist vorhanden (muss nicht erstellt werden): " + str(self.pfad))
else:
input("Oh No! Erstellung des Pfad's war nicht möglich, oder ein anderes Problem ist aufgetreten")
exit()
def nur_pruefen(self):
if not os.path.exists(self.pfad):
input('Der Quellpfad ist nicht vorhanden!!! Programm wird beendet!!!')
exit()
def test(self):
print(self.pfad)
Das ist die definietion der Variable (war vorher im Beispiel test_objekt)
target = "/mnt/Laufwerke"
Aufruf der Klasse im Script:
Pfad_pruefen_erstellen.test(target)
2 Antworten
![](https://images.gutefrage.net/media/user/MrAmazing2/1562539605664_nmmslarge__63_0_466_466_da6195808c107c57ce2a8b233a2bcf4f.jpg?v=1562539606000)
Ich bezweifle, dass Variablennamen ein Minus enthalten dürfen ... Wie soll der Interpreter das denn von einem echten Minus unterscheiden können..
Benenn „test-objekt“ um zu „test_object“, dann sollte es klappen.
Test.test_methode(test_objekt)
Der Aufruf hier passt auch nicht. Du musst ein Objekt deiner Klasse erstellen und die Methode dann beim Objekt aufrufen. Ausserdem erwartet die test_methode keine Parameter, also einfach ().
![](https://images.gutefrage.net/media/user/MrAmazing2/1562539605664_nmmslarge__63_0_466_466_da6195808c107c57ce2a8b233a2bcf4f.jpg?v=1562539606000)
Test.test_methode(test-objekt)
Warum übergibst du hier test-object? Wo hast du das überhaupt her? Die Methode will keine Parameter. self musst du nicht übergeben, das macht Python automatisch.
Ruf die Methode so auf:
test.test_methode()
![](https://images.gutefrage.net/media/default/user/11_nmmslarge.png?v=1551279448000)
Das test_objekt ist eine Variable die vorher definiert wurde. Die möchte in der Klasse bearbeiten:
Vielleicht ist es besser einen Teil des echten Beispiels zu verwenden:
Das ist die Klasse wobei ich die Methode test zu testzwecken ergänzt habe
class Pfad_pruefen_erstellen:
def __init__(self, pfad):
self.pfad = pfad
def pruefen_und_erstellen(self):
if not os.path.exists(self.pfad):
print("Pfad wurde erstellt: " + str(self.pfad))
os.makedirs(self.pfad)
elif os.path.exists(self.pfad):
print("Pfad ist vorhanden (muss nicht erstellt werden): " + str(self.pfad))
else:
input("Oh No! Erstellung des Pfad's war nicht möglich, oder ein anderes Problem ist aufgetreten")
exit()
def nur_pruefen(self):
if not os.path.exists(self.pfad):
input('Der Quellpfad ist nicht vorhanden!!! Programm wird beendet!!!')
exit()
def test(self):
print(self.pfad)
Das ist die definietion der Variable (war vorher im Beispiel test_objekt)
target = "/mnt/Laufwerke"
Aufruf der Klasse im Script:
Pfad_pruefen_erstellen.test(target)
![](https://images.gutefrage.net/media/user/MrAmazing2/1562539605664_nmmslarge__63_0_466_466_da6195808c107c57ce2a8b233a2bcf4f.jpg?v=1562539606000)
Du musst ein Objekt der Klasse erstellen, und die Methoden dann auf dem Objekt aufrufen:
pfad_pruefer = Pfad_pruefen_erstellen(target)
pfad_pruefer.test()
![](https://images.gutefrage.net/media/default/user/11_nmmslarge.png?v=1551279448000)
Ok Super. Vielen Dank. Jetzt hab ich es geschnallt.
![](https://images.gutefrage.net/media/default/user/5_nmmslarge.png?v=1438863662000)
someobj=Pfad_pruefen_erstellen('/mnt/Laufwerke')
someobj.pruefen_und_erstellen()
someobj.nur_pruefen()
someobj.test()
Der Konstruktor erzeugt eine Objektinstanz mit der gewünschten Parametrisierung der Attribute. Danach werden die Methoden der Objekinstanz verwendet.
![](https://images.gutefrage.net/media/default/user/11_nmmslarge.png?v=1551279448000)
Ok. An dem liegt es aber nicht, weil in echten Code das nicht so ist. Trotzdem danke