can a class instance ever be hashable?

Alex cut_me_out at hotmail.com
Thu Sep 21 22:01:12 EDT 2000


Here's some old code of mine that might give you some ideas about how to
use __hash__.

class Pattern:

    def __init__(self, characters, offsets):
        assert len(characters) == len(offsets) + 1
        self.characters = characters
        self.offsets = offsets

    def __hash__(self):
        return hash((self.characters, self.offsets))

    def __cmp__(self,other):
        return cmp((self.characters, self.offsets),
                   (other.characters, other.offsets))

    def __str__(self):
        output = []
        for character, offset in map(None, self.characters[: -1],
                                     self.offsets):
            output.extend([character, offset*'.'])
        output.append(self.characters[-1])
        return string.join(output, '')

    def __repr__(self):
        return 'Pattern(\'%s\', %s)' % (self.characters, self.offsets)

    def __len__(self):
        return len(self.characters)

    def positions(self, start):
        positions = [start]
        for offset in self.offsets:
            positions.append(positions[-1] + offset)
        return positions
        
    

class Pattern:

    def __init__(self, characters, offsets):
        assert len(characters) == len(offsets) + 1
        self.characters = characters
        self.offsets = offsets

    def __hash__(self):
        return hash((self.characters, self.offsets))

    def __cmp__(self,other):
        return cmp((self.characters, self.offsets),
                   (other.characters, other.offsets))

    def __str__(self):
        output = []
        for character, offset in map(None, self.characters[: -1],
                                     self.offsets):
            output.extend([character, offset*'.'])
        output.append(self.characters[-1])
        return string.join(output, '')

    def __repr__(self):
        return 'Pattern(\'%s\', %s)' % (self.characters, self.offsets)

    def __len__(self):
        return len(self.characters)

    def positions(self, start):
        positions = [start]
        for offset in self.offsets:
            positions.append(positions[-1] + offset)
        return positions
        
    
-- 
Speak softly but carry a big carrot.



More information about the Python-list mailing list