如何为此类生成相等和哈希码函数?

问题描述 投票:0回答:1
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__
python
1个回答
0
投票

自动生成的方法实际上是“默认”实现;它们的行为就像完全没有定义一样,必须依靠从父级继承的方法。

如何定义它们取决于您需要它们做什么。例如,两个Token实例相等意味着什么?假设两个令牌具有相同的词和位置(即,我们可以忽略这些特征),它们是相同的。然后,您可以如下定义__eq__

def __eq__(self, o: object) -> bool:
    return self.word == o.word and self.pos == o.pos:

请注意,我们首先不检查o是否具有wordpos属性,甚至oToken。 Python使用“鸭子类型”(如果看起来像鸭子,那就是鸭子):只要o的行为符合我们的预期,我们就不在乎它的实际类型是什么。

© www.soinside.com 2019 - 2024. All rights reserved.