In 2.8, you can use message bus to do that:
The principle is to obtain the path using a path name through the object.
Then declare a subscription to message bus.
#The callback when then change occurs
def a_callback(object, data):
print( object, data, "changed" )
#Get a rna subscription link from the object
subscribe_to = object.path_resolve(data_path, False)
#Effectively subscribe to the rna path from the object
Note: bpy.msgbus is not documented for now. But it contains few functions that we can find using the Python console: