3 # Copyright 2007 Google Inc.
5 # Licensed under the Apache License, Version 2.0 (the "License");
6 # you may not use this file except in compliance with the License.
7 # You may obtain a copy of the License at
9 # http://www.apache.org/licenses/LICENSE-2.0
11 # Unless required by applicable law or agreed to in writing, software
12 # distributed under the License is distributed on an "AS IS" BASIS,
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 # See the License for the specific language governing permissions and
15 # limitations under the License.
17 """Provides ValueMixin.
19 ValueMixin provides comparison (including equality) methods and hashing
20 based on the values of fields.
24 class ValueMixin(object):
25 def __cmp__(self
, other
):
32 if hasattr(other
, '__dict__'):
33 return self
.__dict
__.__cmp
__(other
.__dict
__)
38 return hash(frozenset(self
.__dict
__.items()))
43 attrs
= ['%s=%r' % (key
, d
[key
]) for key
in sorted(d
)]
44 return '%s(%s)' % (self
.__class
__.__name
__, ', '.join(attrs
))