Seite 1 von 1

Funktionen und deren Aufruf

Verfasst: Montag 26. Mai 2025, 14:48
von Ben_2003
Hallo zusammen,

in einer Klasse steht eine Funktion zum Abrufen eines Strings

Code: Alles auswählen

class Userdata:

    def mytoken(self) -> str:
        """Gibt das Token des Bots zurück."""
        return self._mybot.token if self._mybot else ""
Es ist ein Teil von einem Telegram-Bot.

Wenn diese Funktion aufgerufen wird...

Code: Alles auswählen

mytoken = my_usersettings.Userdata.mytoken
Dann enthält die Variable mytoken nicht den String, sondern einen Verweis zu der Funktion.

In anderen Themen wird berichtet, dass man in dem Fall die Funktion aufrufen muss:

Code: Alles auswählen

mytoken = my_usersettings.Userdata.mytoken()
In dem Fall wird der Fehler angezeigt, dass der Parameter self nicht angegeben wurde.

Wie muss die Funktion nun aufgerufen werden?

Re: Funktionen und deren Aufruf

Verfasst: Montag 26. Mai 2025, 15:06
von Sirius3
`my_usersettings.Userdata` ist die Klasse, Du brauchst aber eine Instanz der Klasse, die Du an irgendeiner anderen Stelle im Code erzeugt hast.
Es ist übrigens meist nicht sinnvoll, das Präfix my zu benutzten, insbesondere in Attributen nicht. Kann die Userdata-Klasse nur für Deinen Bot benutzt werden? Wenn Du also auch für Toms Bot Userdata brauchst, dann mußt Du dafür eine neue Klasse definieren? Und an allen Stellen, wo ein Token gebraucht wird, mußt Du dann toms_token() aufrufen? Da das sehr umständlich wäre, läßt man pPräfixe wie my einfach weg.
Ebenso sollten Module generisch definiert werden, nicht nur für eine Person, also `usersettings` statt `my_usersettings`.

Re: Funktionen und deren Aufruf

Verfasst: Montag 26. Mai 2025, 23:46
von __blackjack__
Ergänzend noch: Methoden werden wie Funktionen üblicherweise nach der Tätigkeit benannt die sie durchführen, damit der Leser weiss was da passiert und um sie von eher passiven Werten unterscheiden zu können. Also `get_token()`. `token` wäre ein Name für das Token selbst, also für ein Datenattribut oder ein Property.

Re: Funktionen und deren Aufruf

Verfasst: Dienstag 27. Mai 2025, 09:06
von Ben_2003
Vielen Dank für die Infos.

Das Präfix my wurde verwendet, um auf einem Blick die eigenen Methoden und Funktionen identifizieren zu können.

my_userdata enthält nur für einen User die Angaben. Der Telegram-bot kapselt bereits mehrere Aufrufe vom Bot so, dass man sich nicht um mehrere Instanzen des Telegram-Bot kümmern muss.

Re: Funktionen und deren Aufruf

Verfasst: Dienstag 27. Mai 2025, 11:56
von __blackjack__
@Ben_2003: Die Klasse ist doch von Dir, dann muss ja nach der Logik vor *allen* Attributen und Methodennamen ein `my` stehen. Nur wenn das vor allen steht, unterscheidet man dieser unnötige Präfix gar nichts mehr, und ist damit überflüssig.

Aber selbst wenn man eine vorhandene Klasse beerbt und erweitert, macht man das nicht. Man sieht doch im Quelltext welche eigenen Methoden man geschrieben hat. Stell Dir mal vor das würde jeder machen, dann hätte man ja auch schon überall `my` davor stehen von anderen Programmierern. Dann müsstest Du die Methode `get_bens_token()` nennen, und hoffen, das kein anderer Ben da schon was programmiert hat. Das wäre alles ziemlich schräg. Und es wäre dann auch verwirrend wenn die Methode so heisst weil der Programmierer Ben heisst, aber das `token` letztendlich jemand anderem gehören würde.

Re: Funktionen und deren Aufruf

Verfasst: Dienstag 27. Mai 2025, 19:34
von Dennis89
Vielleicht könnte man die Ben's noch durch nummerieren, damit es zu keiner Verwirrung kommt?

SCNR!

Re: Funktionen und deren Aufruf

Verfasst: Mittwoch 28. Mai 2025, 19:03
von Ben_2003
__blackjack__ hat geschrieben: Dienstag 27. Mai 2025, 11:56 Stell Dir mal vor das würde jeder machen, dann hätte man ja auch schon überall `my` davor stehen von anderen Programmierern.
Du hast Recht. Ich habe es schon geändert.

Die Methoden und Funktionen wurden nun gemäß ihren Funktionen benannt.