Creates a binding between source_property on source and target_property on target. Whenever the source_property is changed the target_property is updated using the same value. For instance:

|[ g_object_bind_property (action, "active", widget, "sensitive", 0);

Will result in the "sensitive" property of the widget [GObject|GObject] instance to be
updated with the same value of the "active" property of the action [GObject|GObject]

If `flags` contains `G_BINDING_BIDIRECTIONAL` then the binding will be mutual:
if `target_property` on `target` changes then the `source_property` on `source`
will be updated as well.

The binding will automatically be removed when either the `source` or the
`target` instances are finalized. To remove the binding without affecting the
`source` and the `target` you can just call `g_object_unref()` on the returned
[gobject.Binding.Binding|gobject.Binding] instance.

A [GObject|GObject] can have multiple bindings.

    sourceProperty = the property on `source` to bind
    target = the target [GObject|GObject]
    targetProperty = the property on `target` to bind
    flags = flags to pass to [gobject.Binding.Binding|gobject.Binding]

Returns: the [gobject.Binding.Binding|gobject.Binding] instance representing the
    binding between the two [GObject|GObject] instances. The binding is released
    whenever the [gobject.Binding.Binding|gobject.Binding] reference count reaches zero.

Since: 2.26
class ObjectG