class Token(object):
def __init__(self, word, pos, features=None):
self.word = word
self.pos = pos
self.features = features
def add_features(self, features):
if features is not None:
self.features = features
def __repr__(self) -> str:
return super().__repr__()
def __hash__(self) -> int:
return super().__hash__()
def __str__(self) -> str:
return super().__str__()
def __eq__(self, o: object) -> bool:
return super().__eq__(o)
def __ne__(self, o: object) -> bool:
return super().__ne__(o)
我是python的新手,并创建了这个简单的Token类,其中word和pos是字符串,而features是列表或集合。 Java中的哈希码等效方法和equals方法是什么?我是在PyCharm中自动创建的,但是这些实现似乎很可疑:
__repr__
__hash__
__str__
__eq__
__ne__
自动生成的方法实际上是“默认”实现;它们的行为就像完全没有定义一样,必须依靠从父级继承的方法。
如何定义它们取决于您需要它们做什么。例如,两个Token
实例相等意味着什么?假设两个令牌具有相同的词和位置(即,我们可以忽略这些特征),它们是相同的。然后,您可以如下定义__eq__
:
def __eq__(self, o: object) -> bool:
return self.word == o.word and self.pos == o.pos:
请注意,我们首先不检查o
是否具有word
和pos
属性,甚至o
是Token
。 Python使用“鸭子类型”(如果看起来像鸭子,那就是鸭子):只要o
的行为符合我们的预期,我们就不在乎它的实际类型是什么。