The [result](http://python-ldap.readthedocs.io/en/latest/reference/ldap.html#ldap.LDAPObject.result)/[result2](http://python-ldap.readthedocs.io/en/latest/reference/ldap.html#ldap.LDAPObject.result2)/[result3](http://python-ldap.readthedocs.io/en/latest/reference/ldap.html#ldap.LDAPObject.result3)/[result4](http://python-ldap.readthedocs.io/en/latest/reference/ldap.html#ldap.LDAPObject.result4) API looks quite silly by today's standards, if you don't mind me saying. Do what [os.stat does](https://docs.python.org/3/library/os.html#os.stat_result). `result()` should return an object that: - for backwards compatibility, acts like a tuple of the first two elements - has everything accessible as attributes. Such a type can be defined at the C level using [Struct Sequence](https://docs.python.org/3/c-api/tuple.html#struct-sequence-objects). In Python 2 this API is private; use a regular namedtuple subclass? Deprecate result2/result3/result4 (but keep them around indefinitely).