== Consider having obvious interfaces too Python offers any number of ways to create very Pythonic interfaces to your objects, natural ways of getting various bits of information out of them. For an example that is [[fresh to my mind FindingSSLCipher]], the _len()_ of [[M2Crypto http://chandlerproject.org/bin/view/Projects/MeTooCrypto]]'s _Cipher_ objects is the number of bits that the cipher uses. The M2Crypto example also illustrates the problem with this way of creating interfaces: it is not necessarily very intuitive to people using your code. The _len()_ of a cipher being its bits strikes me as Pythonic (and it certainly is the closest to the 'length' of a cipher object), but it is not obvious. Short of reading documentation (or in this case, reading the source), there is nothing that points to len(Cipher-object) being the way to get this particular piece of information out of Cipher objects. So I would like to suggest that you consider the merits of giving your objects obvious interfaces too. Adding a _.bits()_ method may not be as elegant as _len()_, but it has the virtue that it is more likely to be noticed by people in the output of _dir()_ and other introspection tools. (I don't know about other people, but I use introspection in the interactive interpreter a lot when I am trying to figure out how to bang together some code. I also tend to skip entirely over the ((__X__)) entries when reading _dir()_'s output, partly because all objects have a certain amount of noise there.) Having said this, I will admit that in retrospect I have committed my share of clever, Pythonic, and not all that obvious interfaces in my own code. I'll have to remember this the next time I am tempted to add a ((__len__)) method to something. (I don't think that docstrings are entirely the answer. Again, perhaps it's just me but I'm more likely to look first at _dir()_'s output and only second at docstrings. And of course, _dir()_ is always there while docstrings need someone to write them, which doesn't always happen.)