Wert aus einer aufgerufenen Methode in eine Variable speichern und in einer anderen Methode abrufen.

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
SuitSmile
User
Beiträge: 7
Registriert: Freitag 13. August 2021, 18:30

Hallo zusammen,

ich schreibe gerade an einem Python-Code und bin auf ein Problem gestoßen, was hoffentlich leichter gelöst werden kann, als ich mich anstelle.
Zudem kann ich den Bereich noch eingrenzen und sagen, dass es sich um einen Discord-Bot handelt.
Aber ich sehe mein Problem ehr in der Allgemeine von Python.

Kurz als Text beschrieben und danach als Code:
- Es geht um drei Methoden und zwei Klassen
- Die erste Klasse hat eine Methode die in einer anderen Klasse eine Methode aufruft und mehrere Variablen übergibt. (Schöner Satz xD)
- In der zweiten Methode werden mit den Variablen Sachen angestellt, verändert etc.
- Unter anderem wird auch eine Variable neu erstellt und genau diese will ich in einer anderen Klasse in einer anderen Methode aufrufen.

Nun der Code. Ich habe diesen vereinfach. Sollte das zu Verwirrung führen, kann ich diesen gerne noch genauer verfassen:

Code: Alles auswählen

class Play():
	async def handle(self, params, message, client):
		# Variablenzuordnung rausgekürzt
		await music.music_download(variable1, variable2, variable3, edit_message)
		# Mit den Variablen, außer edit_message, werden gearbeitet.
		# edit_message soll nur weitergegeben werden.
		await music.music_play(variable1, variable2, variable3, edit_message)

class music():
    async def music_download(variable1, variable2, variable3, edit_message):
		# Variablenzuordnung und Veränderungen rausgekürzt
		edit_message = await variable2.channel.send(embed=embed_music)
		# Nun zu der Zeile wo ich mir unsicher bin, ob dieser überhaupt benötigt wird.
		return edit_message # <--- Diese hier

	async def music_play(variable1, variable2, variable3, edit_message):
		# Hier muss nun die Variable edit_message, mit dem Inhalt der Methode music_download landen.
		# Weil edit_message die Informationen der Channels sowie weitere Attribute enthält.
		await edit_message.channel.send(embed=embed_music)
Hoffe ich habe nichts vergessen.

Viele Grüße Benni
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

Die Variable `music` kommt in Play.handle aus dem Nichts. Die muss wahrscheinlich an selbst gebunden sein und beim Initialisieren von Play übergeben werden.
`music` ist als Klasse falsch geschrieben, müsste `Music` heißen und den Methoden fehlt das self.
music_download hat als Rückgabewert edit_message. Da macht es keinen Sinn, das als Argument zu übergeben. Bisher macht die Klasse keinen Sinn, da müsste man den ungekürzte Code sehen, wir das denn richtig wäre.
SuitSmile
User
Beiträge: 7
Registriert: Freitag 13. August 2021, 18:30

Hi Sirius,

danke für deine Antwort.

Dürfte ich wissen, wo du eine Variable "music" siehst? Meinst du die Klasse?
Und ja, ich stimme dir zu, music ist kleingeschrieben, würde aber keinen Fehler auslösen, auch wenn es nicht schön ist.
Ich habe davor ein Wort weggelassen, deshalb habe ich das versehentlich im Text nicht angepasst. Im Code ist der Anfangsbuchstabe groß.

Zu dem self:
Wäre das self wichtig für die Übergabe der edit_message? Wenn ja, dann stimme ich dir zu, dass diese fehlt.
Ansonsten nicht, da ich mit self in den anderen Methoden nicht arbeite.

Sieh meinen Code bitte nicht als gutes Beispiel.
Es würde mir reichen, wenn jmd so freundlich wäre mir ein Beispiel zu geben, wie ich die bearbeitete Variable(edit_message) aus der Klasse Play in die Klasse (M)music bzw. an die Methode music_play übergeben kann.

Zu den Variablen in den Methoden:
Diese habe ich auch nicht in meinem Code so bennant, diese haben dort besser verständliche Bezeichnungen.
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

Wenn das gar nicht der Code ist, der Probleme macht, wie sollen wir dann helfen können?
Die Klasse music ist sinnlos und gehört weg. Die Methoden sind nur Funktionen. Eingerückt wird immer mit 4 Leerzeichen pro Ebene, keine Tabs. music_play ist zu weit eingerückt.

Code: Alles auswählen

class Play():
    async def handle(self, params, message, client):
        edit_message = await music_download(variable1, variable2, variable3, edit_message)
        await music_play(variable1, variable2, variable3, edit_message)

async def music_download(variable1, variable2, variable3, edit_message):
    return await variable2.channel.send(embed=embed_music)

async def music_play(variable1, variable2, variable3, edit_message):
    await edit_message.channel.send(embed=embed_music)
Antworten