Seite 1 von 1

Plugin System

Verfasst: Donnerstag 3. Juli 2008, 20:04
von DasIch
Ich habe versucht anhand dieses Artikels ein Plugin System zu realisieren.
Das Problem ist dass die Plugin Klasse keine weiteren subklassen bekommt wenn ich mein Plugin importiere. Welches wie im Tutorial von der Plugin Klasse erbt.

Plugin Loader: http://paste.pocoo.org/show/78478/
Das Plugin sieht zum testen einfach so aus:

Code: Alles auswählen

from plugin_loader import Plugin

class ExamplePlugin(Plugin):
    pass

Verfasst: Donnerstag 3. Juli 2008, 22:53
von DasIch
Hm, wenn ich das ganze als Modul importiere funktioniert es einwandfrei :shock:
Das stört mich jetzt nicht weiter aber mich würde schon der Grund interessieren.

Verfasst: Freitag 4. Juli 2008, 00:24
von Karl
DasIch hat geschrieben:Hm, wenn ich das ganze als Modul importiere funktioniert es einwandfrei :shock:
Das stört mich jetzt nicht weiter aber mich würde schon der Grund interessieren.
Ich hab keine Ahnung, warum das so sein könnte, aber ganz sicher, dass du nicht noch irgendeine andere Kleinigkeit geändert hast?
Aber ansonsten hatte ich auch irgendwann mal ein komisches Erlebnis, da war's aber genau andersrum, es funktionierte nur mit einem from import ;)

Verfasst: Freitag 4. Juli 2008, 01:34
von DasIch
In Zeile 44 musste das `not` weg, deswegen wurde eine leere Liste an `load` übergeben. Das hat aber das Problem trotzdem nicht gelöst. Im Tutorial wird das ganze auch in einer Python Shell demonstriert, hätte ich schon vorher mal testen sollen.
Da ich das ganze natürlich noch etwas erweitern werde etc. wird es sicherlich nicht schaden das ganze als Modul zu lassen. Insofern ist stellt das ganze jetzt für mich kein akutes Problem mehr dar.
Wie gesagt wäre es trotzdem interessant den Grund zu wissen.

Verfasst: Freitag 4. Juli 2008, 13:17
von Trundle
Wenn du das direkt ausführst, wird das Modul als ``__main__`` geladen. Das Plugin importiert das ``plugin_loader``-Modul. ``plugin_loader`` wurde vorher jedoch als ``__main__`` importiert, wird also noch einmal als ``plugin_loader`` geladen. Und `plugin_loader.Plugin` ist nun halt mal nicht `__main__.Plugin`. Würde das Plugin ``from __main__ import Plugin`` machen, würde das erwartete Verhalten auftreten.

Verfasst: Freitag 4. Juli 2008, 14:50
von DasIch
Da muss man erstmal drauf kommen, danke.