ned at nedbatchelder.com
Sat Nov 1 18:11:25 CET 2014
On 11/1/14 12:56 PM, duncan smith wrote:
> I have a Bloom filter class and want to (partially) serialize
> instances using hex() or oct(). Instances are mutable, so I can't
> inherit from long. I thought I'd found the answer when I came across
> https://docs.python.org/2/reference/datamodel.html#object.__index__. But
> it doesn't seem to work as I expected it to.
>>>> class MyClass(object):
> def __init__(self):
> self.val = 7
> def __index__(self):
> return self.val
>>>> x = MyClass()
> Traceback (most recent call last):
> File "<pyshell#76>", line 1, in <module>
> TypeError: oct() argument can't be converted to oct
> Can someone please explain why my thinking is wrong on this? TIA.
Just above your link in the docs is __oct__ and __hex__, which are used
to implement oct() and hex():
That said, I would simply add a .hex() method on the class. I would
never expect a complex thing like a Bloom filter to be turned into
useful hex with the hex() builtin.
For example, when making an MD5 hash, you use the md5.hexdigest()
method, not hex(md5).
Ned Batchelder, http://nedbatchelder.com
More information about the Python-list