def __le__(self, other): return AttributePath(self).__le__(other)
def contains(self, item): return AttributePath(self).contains(item)
def __ne__(self, other): if other is None or isinstance(other, Attribute): # handle object identity comparison return self is not other return AttributePath(self).__ne__(other)
def is_type(self): # What makes sense here? Are we using this to check if deserialization will be successful? return AttributePath(self).is_type(ATTR_TYPE_MAP[self.attr_type])
def startswith(self, prefix): return AttributePath(self).startswith(prefix)
def does_not_exist(self): return AttributePath(self).does_not_exist()
def exists(self): return AttributePath(self).exists()
def is_in(self, *values): return AttributePath(self).is_in(*values)
def between(self, lower, upper): return AttributePath(self).between(lower, upper)
def __getitem__(self, idx): return AttributePath(self).__getitem__(idx)