Funktion in Klasse 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
G-Rizzle
User
Beiträge: 90
Registriert: Donnerstag 18. Februar 2021, 12:26

Hi,

ich möchte eine Klasse erstellen, die verschiedene Funktionen aus einem anderen Pythonprogramm im Ordner aufrufen kann.
Dies möchte ich realisieren, indem bei der Instanzierung im Objekt der "pfad" zu dieser Funktion gespeichert wird. Auszug aus meinem Code:

Code: Alles auswählen

class interactiv_button_changable_text():

    def __init__(self, pfad):
        
        self.pfad = pfad
        

    def draw_button(self, screen):

        text = self.pfad    # HIER SOLL DIE ANDERE FUNKTION AUFGERUFEN WERDEN UND IN DIE VARIABLE TEXT GESPEICHERT WERDEN
        
        text_img = self.font.render(text, True)
               


mausposition_aktiv_button = interactiv_button_changable_text( 'hilfsfunktionen.mausposition_aktiv()')   # hilfsfunktionen.mausposition_aktiv() IST DER PFAD DIREKT ZUR GEWÜNSCHTEN FUNKTION, DIE ENTSPRECHENDEN WERT RETURNT


'pfad' wird natürlich leider nur als string erkannt, die variable 'text' entspricht damit einfach nur 'hilfsfunktionen.mausposition.aktiv()'.

wie erreiche ich, dass dieser pfad als funktionsaufruf interpretiert wird?



Besten Dank schonmal!!!
Benutzeravatar
__blackjack__
User
Beiträge: 14054
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@G-Rizzle: Klassennamen schreibt man in Python in PascalCase. Also `InteractivButtonChangableText` statt `interactiv_button_changable_text`. Wobei der Name inhaltlich ein bisschen verwirrend ist. Was soll das denn für ein "Ding" sein?

Natürlich wir `pfad` als Zeichenkette ”erkennt” wenn es eine Zeichenkette ist. Man würde hier keine Zeichenkette übergeben sondern die Funktion.

Code: Alles auswählen

#!/usr/bin/env python3
import hilfsfunktionen


class InteractivButtonChangableText:
    def __init__(self, text_function):
        self.text_function = text_function
        self.font = ...
        ...

    def draw_button(self, screen):
        text_image = self.font.render(self.text_function(), True)
        ...


def main():
    ...
    mausposition_aktiv_button = InteractivButtonChangableText(
        hilfsfunktionen.mausposition_aktiv
    )
    ...
`hilfsfunktionen` ist ein ziemlich generischer Name. `mausposition_aktiv` beschreibt keine Tätigkeit, das sollten Funktions- und Methodennamen aber in der Regel tun, damit der Leser weiss was die tun und um sie von eher passiven Werten besser unterscheiden zu können.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten