Создание namedtuple с пользовательской хеш-функцией

Удалил следующий якорь и убрал тег top, когда он перемещал его по щелчку / активному.

.call-to-action:active {
  position: relative;
}

Спасибо MichaelvE за ответ.

21
задан Erik Kaplun 18 August 2012 в 10:12
поделиться

2 ответа

Я думаю, что с вашим кодом что-то не так (я предполагаю, что вы создали экземпляр кортежа с таким же именем, поэтому fooTuple теперь является кортежем, а не классом кортежа), потому что подкласс именованного кортежа должен работать. В любом случае, вам не нужно переопределять конструктор. Вы можете просто добавить хэш-функцию:

In [1]: from collections import namedtuple

In [2]: Foo = namedtuple('Foo', ['item1', 'item2'], verbose=False)

In [3]: class ExtendedFoo(Foo):
   ...:     def __hash__(self):
   ...:         return hash(self.item1) * hash(self.item2)
   ...: 

In [4]: foo = ExtendedFoo(1, 2)

In [5]: hash(foo)
Out[5]: 2
27
ответ дан 29 November 2019 в 21:23
поделиться

Начиная в Python 3.6.1, это может быть достигнуто более чисто с typing.NamedTuple класс (как долго, поскольку Вы соглашаетесь с подсказками типа):

from typing import NamedTuple, Any


class FooTuple(NamedTuple):
    item1: Any
    item2: Any

    def __hash__(self):
        return hash(self.item1) * hash(self.item2)
3
ответ дан 29 November 2019 в 21:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: