GObject.Object¶
Compare to other types, GObject.Object
has the best integration between
the GObject and Python type system.
It is possible to subclass a
GObject.Object
. Subclassing creates a newGObject.GType
which is connected to the new Python type. This means you can use it with API which takesGObject.GType
.The Python wrapper instance for a
GObject.Object
is always the same. For the same C instance you will always get the same Python instance.
In addition GObject.Object
has support for signals and
properties
Examples¶
Subclassing:
>>> from gi.repository import GObject
>>> class A(GObject.Object):
... pass
...
>>> A()
<__main__.A object at 0x7f9113fc3280 (__main__+A at 0x559d9861acc0)>
>>> A.__gtype__
<GType __main__+A (94135355573712)>
>>> A.__gtype__.name
'__main__+A'
>>>
In case you want to specify the GType name we have to provide a
__gtype_name__
:
>>> from gi.repository import GObject
>>> class B(GObject.Object):
... __gtype_name__ = "MyName"
...
>>> B.__gtype__
<GType MyName (94830143629776)>
>>>
GObject.Object
only supports single inheritance, this means you can
only subclass one GObject.Object
, but multiple Python classes:
>>> from gi.repository import GObject
>>> class MixinA(object):
... pass
...
>>> class MixinB(object):
... pass
...
>>> class MyClass(GObject.Object, MixinA, MixinB):
... pass
...
>>> instance = MyClass()
Here we can see how we create a Gio.ListStore
for our new subclass and
that we get back the same Python instance we put into it:
>>> from gi.repository import GObject, Gio
>>> class A(GObject.Object):
... pass
...
>>> store = Gio.ListStore.new(A)
>>> instance = A()
>>> store.append(instance)
>>> store.get_item(0) is instance
True
>>>