I do not think that this is possible in the way you want to do it. Certain parameters are simply not stored in the
BaseContainer of a node. You have to use the specific methods for them. Also the Python side of things does not quite work out as your posting suggests (or at least how I do read it). Se below for details.
"""The feature you are looking for is actually not a feature of c4dpy's
BaseContainer, but of its BaseList2D.__getitem__() and .__setitem().
The code below demonstrates that things even in Python do not quite work out
as your posting suggests. The reason for that is that certain attributes are
not stored in the BaseContainer of a node. See C++ docs on BaseList2D::
GetData() for details.
if op is None:
# Using the Python wrapper via BaseList2D.__getitem__ to access the world
# position of an object.
print ("__getitem__ access:", op[c4d.ID_BASEOBJECT_ABS_POSITION])
# Getting the data container instance.
data = op.GetDataInstance()
# There is no world position in there.
# Note: The return value here being None obviously only works the first
# time the script is being run, because below we will write the null
# vector to this ID.
print ("container access:", data[c4d.ID_BASEOBJECT_ABS_POSITION])
# We can write to that ID, but Cinema won't' respect it.
data[c4d.ID_BASEOBJECT_ABS_POSITION] = c4d.Vector()
print ("__getitem__ access after container write attempt:",
# We have to use __setitem__ to make use of the nice unified parameter
# access the Python wrapper does offer.
op[c4d.ID_BASEOBJECT_ABS_POSITION] = c4d.Vector(100)
print ("__getitem__ access after __setitem__ write attempt:",
# The only way in C++ is to use BaseObject::GetMg() or the respective
# position specific method. You will have to handle these DescIDs manually.
__getitem__ access: Vector(-155.012, 70.587, -119.76)
container access: None
__getitem__ access after container write attempt: Vector(-155.012, 70.587, -119.76)
__getitem__ access after __setitem__ write attempt: Vector(100, 100, 100)