2013-08-07 4 views
1

Я хочу создать класс Set в Python, но в отличие от установленного класса, который уже реализован в Python, я хочу, чтобы мой набор содержал элементы только одного типа. Например, набор целых чисел, набор строк и набор любого другого определяемого пользователем класса.Python - только набор одного типа

Есть ли способ в Python передать тип в качестве параметра в класс? или любым другим способом сделать это?

Я думал об использовании dict для реализации набора, но dicts может содержать элементы разных типов.

+0

наборов только словари без значения. Вам нужно будет проверить типы при любых манипуляциях с множеством; добавление, пересечения, союзы и т. д. Указание того, какой тип должно быть в инициализаторе, является лишь частью задачи. –

+0

Я думаю, что отсутствие статической типизации предотвращает такую ​​функцию. – njzk2

+0

И чего вы надеетесь достичь? Python динамически типизирован, и это * сила *. Почему попытка удалить это? В массиве 'array()' есть утилита, сохраняющая примитивные типы для быстрых операций и сокращение занимаемой памяти, но вы также хотите поддерживать настраиваемые типы. –

ответ

1

Что-то подобное?

from sets import Set 

class MySet(Set): 

    def __init__(self, iter, klass=None): 
     if klass is not None: 
      for item in iter: 
       if not isinstance(item, klass): 
        raise Exception("Error") 
     super(MySet, self).__init__(iter) 


if __name__ == '__main__': 

    set1 = MySet([1,2,3], int) 
    set2 = MySet([2,3,4], int) 

    print set2.intersection(set1) 

Если вы хотите контроль типа даже в методах, как intersection, вы должны переопределить вызов для генерации нового набора (self.__class__(common))

прощальных

+0

Отлично. благодаря! – user2483939

+0

Хотел бы я проголосовать, но у меня недостаточно репутации. – user2483939

Смежные вопросы