Python 3.3+collectionsпонятие
collections.abc.MutableSet
collections.abc — протоколы
Изменяемое множество (set): add/discard — frozenset не подходит.
Синтаксис
isinstance(obj, collections.abc.MutableSet)
Своя реализация требует пяти методов — __contains__, __iter__, __len__, add и discard — а clear, pop, remove и операции |=, &=, -=, ^= достаются миксинами. Обратите внимание на разницу контрактов: discard молча игнорирует отсутствующий элемент, а remove на нём бросает KeyError, это не синонимы. И frozenset, и представления вроде dict.keys() — это Set, но не MutableSet: добавить в них ничего нельзя.
Примеры
import collections.abc as abc
print(isinstance(set(), abc.MutableSet)) # → True
print(isinstance(frozenset(), abc.MutableSet)) # → False
print(isinstance(frozenset(), abc.Set)) # → True
print(isinstance({}.keys(), abc.Set)) # → True
s = {1, 2}; s.discard(3); print(s) # → {1, 2}
print(sorted(abc.MutableSet.__abstractmethods__)) # → ['__contains__', '__iter__', '__len__', 'add', 'discard']
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности