How to use API to get an object's constrained position? I'm using Blender 2.8 but this question probably applies to older versions as well.

Scenario:


I have an Empty located at the origin.
I have a Bezier Curve.
The Empty has a Follow Path constraint targeting the Bezier Curve. This
successfully causes the Empty to move along the path.




What I need is a way to access the modified location of the Empty after the constraint is applied. I only seem to be able to get to the original unconstrained location (0, 0, 0). E.g.

&gt;&gt;&gt; D.objects['Empty'].location
Vector((0.0, 0.0, 0.0))


Help is appreciated.
After much digging around I believe for this simple case I can get what I need in D.objects['Empty'].matrix_local. E.g.

&gt;&gt;&gt; D.objects['Empty'].matrix_local
Matrix(((1.0, 0.0, 0.0, -0.7031904458999634),
        (0.0, 1.0, 0.0, 0.0),
        (0.0, 0.0, 1.0, 0.29674994945526123),
        (0.0, 0.0, 0.0, 1.0)))
&gt;&gt;&gt; [D.objects['Empty'].matrix_local[i][3] for i in range(3)]
[-0.7031904458999634, 0.0, 0.29674994945526123]


There is also matrix_world (which is the same in this simple case). But if there is a better way to do this more generally, I hope someone will illuminate us.