'Allow access to attributes on the representation and differential as
found via ``self.get_representation_component_names``.
TODO: We should handle dynamic representation transforms here (e.g.,
`.cylindrical`) instead of defining properties as below.'

def __getattr__(self, attr):

    if attr.startswith(u'_'):
        return self.__getattribute__(attr)
    repr_names = self.representation_component_names
    if (attr in repr_names):
        if (self._data is None):
            self.data
        rep = self.represent_as(self.representation, in_frame_units=True)
        val = getattr(rep, repr_names[attr])
        return val
    diff_names = self.get_representation_component_names(u's')
    if (attr in diff_names):
        if (self._data is None):
            self.data
        rep = self.represent_as(in_frame_units=True, **self.get_representation_cls(None))
        val = getattr(rep.differentials[u's'], diff_names[attr])
        return val
    return self.__getattribute__(attr)
