Reputation: 119
I have an linux based python application, which make use of pygtk
and gtk
.
It have both UI execution & command line mode execution option.
In UI mode, to create main application window, class definition is
class ToolWindow(common.Singleton, gtk.Window):
def __init__(self):
gtk.Window.__init__(self,gtk.WINDOW_TOPLEVEL)
What I want to do is, if application is able to import gtk
and pygtk
, then only
class ToolWindow
should inherit both common.Singleton
and gtk.Window
classes, else it should only inherit common.Singleton
class.
What is the best way to do it?
Upvotes: 4
Views: 900
Reputation: 17900
You can specify a metaclass where you can test what modules are importable:
class Meta(type):
def __new__(cls, name, bases, attrs):
try:
import gtk
bases += (gtk.Window)
except ImportError:
# gtk module not available
pass
# Create the class with the new bases tuple
return super(Meta, cls).__new__(cls, name, bases, attrs)
class ToolWindow(common.Singleton):
__metaclass__ = Meta
...
This is just a raw sketch, obviously many improvements can be done, but it should help you get started.
You should be aware that you should change your __init__()
method from ToolWindow
because it may not have the gtk
module available (maybe set a flag in the metaclass to later check if the module is available; or you can even redefine the __init__()
method from within the metaclass based on whether the module is available or not -- there are several ways of tackling this).
Upvotes: 3