performing set operations on custom classes in pyt

2019-01-18 10:19发布

I'd like to use Python's built-in set class with a custom class that I've created. If I want to create sets containing instances of my custom class, what functions do I need to implement so that I can perform tests, like set_a - set_b?

标签: python set
2条回答
Rolldiameter
2楼-- · 2019-01-18 10:28

It will work out of the box, however, there might be cases, when it makes sense to overload __eq__, __ne__ and __hash__. By default, __eq__ will compare for object identity. This might not be what you want. In that case, you have to take care that equal object have equal hashes, and, ideally, not equal object have different hashes (although this is not required, it merely reduces collisions). You should always implement __ne__ using __eq__, unless you have a specific reason to do otherwise (this is done to ensure logical consistency).

Also, when overloading __hash__, you have to take care that the hash does not change while the object is stored in a set.

查看更多
该账号已被封号
3楼-- · 2019-01-18 10:37

If you want to support - operation for your class, you can do something like this :

#!/usr/bin/python

class Test(object):
    def __init__(self, val):
        self.val = val
    def __sub__(self, y):
        return Test(self.val - y.val)

x = Test(10) - Test(5)
print x.val

__sub__ is called when - operation is performed.

查看更多
登录 后发表回答