1

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

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

class Window(Gtk.Window):

是否可以使用返回的小部件Gtk.Builder.get_object()来构造Window()?我认为它应该正在使用__new__()或其他东西,但我无法弄清楚。

4

1 回答 1

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__和其他适当的方法。

于 2013-03-11T04:54:36.363 回答