Скажите, у меня есть namedtuple
, как это:
FooTuple = namedtuple("FooTuple", "item1, item2")
И я хочу, чтобы для хэширования использовалась следующая функция:
foo_hash(self):
return hash(self.item1) * (self.item2)
Я хочу это, потому что хочу, чтобы порядок item1
и item2
не имел значения (я сделаю то же самое для оператора сравнения). Я думал о двух способах сделать это. Первый будет:
FooTuple.__hash__ = foo_hash
Это работает, но кажется взломанным. Поэтому я попытался создать подкласс FooTuple
:
class EnhancedFooTuple(FooTuple):
def __init__(self, item1, item2):
FooTuple.__init__(self, item1, item2)
# custom hash function here
Но тогда я получаю это:
DeprecationWarning: object.__init__() takes no parameters
Итак, что я могу сделать? Или это вообще плохая идея, и я должен просто написать свой собственный класс с нуля?