我正在使用Python中的图形库,我正在以这种方式定义我的vetex:
class Vertex:
def __init__(self,key,value):
self._key = key
self._value = value
@property
def key(self):
return self._key
@key.setter
def key(self,newKey):
self._key = newKey
@property
def value(self):
return self._value
@value.setter
def value(self,newValue):
self.value = newValue
def _testConsistency(self,other):
if type(self) != type(other):
raise Exception("Need two vertexes here!")
def __lt__(self,other):
_testConsistency(other)
if self.index <= other.index:
return True
return False
......
我真的必须自己定义__lt __,__ eq __,__ ne __。它太冗长了。有更简单的方法可以解决这个问题吗? 干杯。 请不要使用__cmp__,因为它将在python 3中消失。
答案 0 :(得分:5)
functools.total_ordering可以帮到你。它意味着是一个类装饰器。您可以定义__lt__()
,__le__()
,__gt__()
或__ge__()
AND __eq__
中的一个,然后填写其余部分。
作为旁注:
而不是写这个
if self.index <= other.index:
return True
return False
写下这个:
return self.index <= other.index
这样更干净。 : - )
答案 1 :(得分:2)
使用functools.total_ordering
,您只需要定义一个相等运算符和一个排序运算符。在Python&lt; 3.2,你运气不好,某些东西必须将这些运算符定义为单独的方法。虽然您可以通过自己编写更简单的total_ordering
版本来保存一些代码,但如果您需要在多个地方使用它。