Simple questions on use of objects (probably faq)
Steven D'Aprano
steve at REMOVETHIScyber.com.au
Thu Mar 9 17:02:02 EST 2006
On Thu, 09 Mar 2006 13:23:22 +0100, Brian Elmegaard wrote:
> Steven D'Aprano <steve at REMOVETHIScyber.com.au> writes:
>
>> Can you explain more carefully what you are trying to do? If you want the
>> square of the maximum value, just do this:
>
> I want to get the value of another attribute of the instance with
> maximum x.
One solution to that has already been given, using the DSU
(decorate-sort-undecorate) idiom:
list_of_instances = [C(x) for x in (1, 2, 3, 4)]
data = [(instance.x, instance.y) for instance in list_of_instances]
m = max(data)
print m[1] # prints the y value of the instance with the largest x value
But perhaps a better way would be to define a __cmp__ method for your
class so that comparisons are done by comparing the x attribute:
class C:
def __init__(self, x):
self.x = x
self.y = something_else()
def __cmp__(self, other):
# not tested
try:
if self.x < other.x:
return -1
elif self.x > other.x:
return +1
else:
return 0
except:
return NotImplemented
With this method in the class, your solution is easier than ever:
data = [C(x) for x in (1,2,3,4)]
m = max(data)
print m.x
print m.y
--
Steven.
More information about the Python-list
mailing list