python调用compare工具,Python相当于Java的compareTo()

I'm doing a project in Python (3.2) for which I need to compare user defined objects. I'm used to OOP in Java, where one would define a compareTo() method in the class that specifies the natural ordering of that class, as in the example below:

public class Foo {

int a, b;

public Foo(int aa, int bb) {

a = aa;

b = bb;

}

public int compareTo(Foo that) {

// return a negative number if this < that

// return 0 if this == that

// return a positive number if this > that

if (this.a == that.a) return this.b - that.b;

else return this.a - that.a;

}

}

I'm fairly new to classes/objects in Python, so I'd like to know what is the "pythonic" way to define the natural ordering of a class?

解决方案

You can implement the special methods __lt__, __gt__ etc. to implement the default operators for custom types. See more about them in the language reference.

For example:

class Foo:

def __init__ (self, a, b):

self.a = a

self.b = b

def __lt__ (self, other):

if self.a == other.a:

return self.b < other.b

return self.a < other.b

def __gt__ (self, other):

return other.__lt__(self)

def __eq__ (self, other):

return self.a == other.b and self.b == other.b

def __ne__ (self, other):

return not self.__eq__(other)

Or as said by stranac in the comments, you can use the total_ordering decorator to save some typing:

@functools.total_ordering

class Foo:

def __init__ (self, a, b):

self.a = a

self.b = b

def __lt__ (self, other):

if self.a == other.a:

return self.b < other.b

return self.a < other.b

def __eq__ (self, other):

return self.a == other.b and self.b == other.b

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值