Plugin-System mit Plugin-Basisklasse.
Verfasst: Sonntag 12. August 2007, 17:11
Ich versuche das Pluginsystem von gedit nach zubauen. Es stellt ein gedit-Modul bereit welches vom Plugin importiert werden muss. Nun erstellt es eine Klasse die von gedit.Plugin erbt. Diese wird von gedit instanziert und die activate-Methode wird aufgerufen.
So sieht mein Versuch aus:
gedit.py
plugin.py
Es passiert allerdings nichts (plugins ist leer). Das Problem scheint zu sein, das alle Variable von gedit.py zweimal existieren. Einmal für plugin.py und einmal für gedit.py, welches ich mit python gedit.py aufrufe. In der plugin.py-Version ist MyPlugin enthalten, aber wie komm ich da ran?
Wie kann ich Variablen "modul-übergreifend" definieren?
So sieht mein Versuch aus:
gedit.py
Code: Alles auswählen
plugins = []
instances = []
class PluginMeta(type):
def __new__(mcs, name, bases, dct):
plugin = type.__new__(mcs, name, bases, dct)
plugins.append(plugin)
return plugin
class Plugin(object):
__metaclass__ = PluginMeta
def activate(self):
raise NotImplementedError
if __name__ == '__main__':
__import__('plugin')
for plugin in plugins:
if plugin != Plugin:
instance = plugin()
instance.activate()
instances.append(instance)
Code: Alles auswählen
import gedit
class MyPlugin(gedit.Plugin):
def __init__(self):
gedit.Plugin.__init__(self)
def activate(self):
print 'Hello World'
Wie kann ich Variablen "modul-übergreifend" definieren?