python中的条件类继承定义

2024-04-26 01:11:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个基于linux的python应用程序,它使用pygtk和gtk。 它有UI执行和命令行模式执行选项。 在UI模式下,要创建主应用程序窗口,类定义是

class ToolWindow(common.Singleton, gtk.Window):

     def __init__(self):
         gtk.Window.__init__(self,gtk.WINDOW_TOPLEVEL)

我要做的是,如果应用程序能够导入gtk和pygtk,那么 类ToolWindow应该同时继承这两者普通。单身以及gtk.窗口类,否则它只应继承普通。单身班级。在

最好的方法是什么???在


Tags: 命令行self应用程序uigtk定义initlinux
1条回答
网友
1楼 · 发布于 2024-04-26 01:11:54

您可以指定一个元类,在其中可以测试哪些模块是可导入的:

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

   ...

这只是一个粗略的草图,显然可以做很多改进,但它应该可以帮助你开始。在

您应该知道您应该将__init__()方法从ToolWindow更改,因为它可能没有{}模块(可能在元类中设置一个标志,以便以后检查该模块是否可用;或者,您甚至可以根据模块是否可用,在元类中重新定义__init__()方法有几种解决方法)。在

相关问题 更多 >