Я бы хотел использовать встроенный набор классов Python со специальным классом, который я создал. Если я хочу для создания наборов, содержащих экземпляры моего пользовательского класса, какие функции мне нужно реализовать, чтобы я мог выполнять тесты, например set_a - set_b?
Выполнение заданий на пользовательских классах в python
Ответ 1
Это будет работать из коробки, однако могут быть случаи, когда имеет смысл перегрузить __eq__
, __ne__
и __hash__
. По умолчанию __eq__
будет сравнивать идентификатор объекта. Возможно, это не то, что вы хотите. В этом случае вам нужно позаботиться о том, чтобы равный объект имел равные хэши, и, в идеале, не равный объект имел разные хэши (хотя это не требуется, это просто уменьшает коллизии). Вы всегда должны использовать __ne__
с помощью __eq__
, если у вас нет конкретной причины делать это иначе (это делается для обеспечения логической согласованности).
Кроме того, при перегрузке __hash__
вы должны следить за тем, чтобы хеш не изменялся, пока объект хранится в set
.
Ответ 2
Если вы хотите поддерживать -
операцию для class
, вы можете сделать что-то вроде этого:
#!/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__
вызывается при выполнении операции -
.