从超类实例构造类

时间:2013-03-11 03:32:53

标签: inheritance constructor python-3.x pygobject

所以你有一些函数,比如Gtk.Builder.get_object(),它会返回一些小部件。在我们的案例中是Gtk.Window()

我有一个Gtk.Window()的子类,它添加了一些信号处理程序。

class Window(Gtk.Window):

是否可以使用Gtk.Builder.get_object()返回的窗口小部件来构建Window()?我认为应该使用__new__()或其他东西,但我无法弄明白。

1 个答案:

答案 0 :(得分:1)

我认为使用__new__正是您想要做的。如果你可以设置你要进入子类的超类实例的__class__属性,你应该全部设置。

以下是我认为您需要的内容:

class Window(Gtk.Window):
    def __new__(cls, *args, **kwargs):
        self = Gtk.Builder.get_object()
        self.__class__ = cls
        return self

Python应该检测到__new__创建的值是类的实例(感谢__class__值),然后它会调用__init__和其他方法。