import pygtk pygtk.require('2.0') import gobject class Foo(gobject.GObject): __gproperties__ = {'frob':(bool, 'frob', 'frob foo', False, gobject.PARAM_READWRITE|gobject.PARAM_CONSTRUCT)} def __init__(self): self.properties = {} gobject.GObject.__init__(self) def do_get_property(self, prop): print self, prop return self.properties[prop.name] def do_set_property(self, prop, value): print self, prop, value if not getattr(self, 'properties', None): self.properties = {} self.properties[prop.name] = value gobject.type_register(Foo) x = Foo() # should return False, instead raises a KeyError because the object the # property was set on is not the object we received from the # constructor. Strange. print x.get_property('frob')