Python Frage: Woher kommt nicht nachvollziehbare Syntax: self["name"] = <class call>

  • Zu der Syntax:


    self["name"] = <class call>


    habe ich bisher im Internet nichts gefunden.

    Diese Zuweisung ruft wohl implizit die Funktion "execBegin()" auf die innerhalb der Klasse definiert sein muss.

    Dazu gibt es meist auch noch "execEnd()" innerhalb der Klasse.


    Ist das was Dream spezifisches?

    Falls ja was passiert bei so einer Zuweisung?

    Wann wird "execEnd" aufgerufen?


    Mysteriös?


    /Willi/

  • da wird eine instanz der class erzeugt und an self["name"] zugewiesen.

    beim erzeugen der instanz wird der konstruktor __init__ aufgerufen. mit execBegin/End hat das nix zu tun. die werden beim starten/beenden eines screens aufgerufen.

  • Hallo alpha,


    Hilf einem blutigen Python Anfänger doch mal auf die Sprünge:

    Wie würde man den einfachen folgenden Code zum laufen bringen (getestet mit Python 2.7)


    Da fehlt mir eindeutig know how!


    /Willi/

  • Ist grad schwierig zu verstehen, was du mit deinem Beispiel überhaupt bezwecken willst. Du nimmst dir besser ein Plugin von github.com/opendreambox und schaust dir an, was dort gemacht wird. Ich würde nicht grad mit einem komplexen wie EPGRefresh anfangen sondern vielleicht mit dem: https://github.com/opendreambo…manentclock/src/plugin.py


    Deine Frage von self["name"] = <class call> kommt wohl eher von sowas:

    self["myLabel"] = Label()


    Wobei myLabel dem Namen des widgets im skin entspricht. Und mit Label() sagst du, dass es sich um ein widget vom Typ Label handelt.


    Label ist so definiert:

    class Label(VariableText, HTMLComponent, GUIComponent):

    Gruss
    Dre


    Boxen (im Einsatz): DM920, DM900, DMOne
    Developer Project Merlin - we are OpenSource

  • das self["eins"] funktioniert so stanalone nicht... nur im enigma environment. weiss grad nicht, wo die setter und getter funktionen definiert sind.. in Screen.py???

    wenn du self.eins schreibst, sollte es gehen.

  • Genau, im Screen wird ein dict mitgegeben, weshalb es da mit self["eins"] geht :winking_face:


    Wenn man das in die Class b() auch reinnimmt, dann klappt es auch mit dem angeführten Beispiel:

    Python
    class b(dict):
        def __init__(self):
            dict.__init__(self)
            print ("Hello world 2")
            self["eins"] = a()
            self["eins"].test()

    Ansonsten ginge es auch mit self.eins, wie alpha schon meinte.

    Python
    class b():
        def __init__(self):
            print ("Hello world 2")
            self.eins = a()
            self.eins.test()

    Gruß Sven (aka Dreamy)


    DM920 mit unstable OE2.5 DP
    One mit unstable OE2.6 DP

  • Hallo Sven,


    Du kennst Dich einfach aus! Verwirrend für mich als Anfänger ist, das

    Dictionaries auch ohne eigenen Variablen Namen benutzt werden können.

    Also erwarten würde ich: self.var["hier"] = . Das dies auch ohne das "var" geht -

    unerwartbar.


    Im Internet habe ich kein Beispiel gefunden, dass ohne "var" auskommt.


    Wo steht so was?


    Wie immer - vielen Dank!


    /Willi/

  • Du kennst Dich einfach aus!

    Naja, inzwischen hab ich mich so reingewurschtelt :winking_face:

    Dass ich mich auskenne, würde ich so noch nicht unterschreiben wollen :smiling_face_with_sunglasses:

    Zitat

    Wo steht so was?

    Na im Code der Screen.py zum Beispiel :winking_face:

    In den Dateien im DreamOS findet man eigentlich fast immer eine Lösung :winking_face_with_tongue:

    Gruß Sven (aka Dreamy)


    DM920 mit unstable OE2.5 DP
    One mit unstable OE2.6 DP

    Einmal editiert, zuletzt von Sven H ()

  • self ist im prinzip auch nur eine variable... nur normalerweise kein dictionary.

    statt self koenntest du ueberall bla schreiben. wuerde auch gehen.

    Einmal editiert, zuletzt von alpha ()