travail des classes abstraites de collections
, comme @ kaizer.se suggère, est la solution appropriée 2.6 (non bien sûr, pourquoi voulez-vous appeler super - quelle fonctionnalité essayez-vous de déléguer qui ne peut pas être mieux faite par confinement plutôt que par héritage?!).
Il est vrai que vous ne recevez pas update
- en fournissant les méthodes abstraites, vous obtenez __le__, __lt__, __eq__, __ne__, __gt__, __ge__, __and__, __or__ __sub__, __xor__, and isdisjoint
(de collections.Set
) plus clear, pop, remove, __ior__, __iand__, __ixor__, and __isub__
(de collections.MutableSet
), qui est beaucoup plus que vous obtenez de sous-classement set
(où vous devez remplacer par méthode d'intérêt). Vous devrez juste fournir d'autres méthodes que vous désirez.
Notez que les classes de base abstraites comme collections.Set
sont une bête assez différente des classes concrètes, y compris builtins tels que set
et (2.6) bon vieux sets.Set
, mais désapprouvée toujours autour (enlevé en Python 3). Les ABC sont censés hériter de (et peuvent ensuite synthétiser certaines méthodes de vous une fois que vous avez implémenté toutes les méthodes abstraites, comme vous devez) et secondairement à "enregistrer" les classes avec comme elles semblent hériter d'elles même quand elles ne le font pas. (pour rendre isinstance
plus utile et utile).
Voici un exemple de travail pour Python 3.1 et 2.6 (aucune bonne raison d'utiliser 3.0, la version 3.1 n'a que des avantages sur elle, aucun inconvénient):
import collections
class LowercasingSet(collections.MutableSet):
def __init__(self, initvalue=()):
self._theset = set()
for x in initvalue: self.add(x)
def add(self, item):
self._theset.add(item.lower())
def discard(self, item):
self._theset.discard(item.lower())
def __iter__(self):
return iter(self._theset)
def __len__(self):
return len(self._theset)
def __contains__(self, item):
try:
return item.lower() in self._theset
except AttributeError:
return False
@Casebash: S'il vous plaît ne pas commenter votre question . Même "bonne suggestion" est - à la longue - assez bête. D'autres personnes veulent votre * question * et la * réponse * choisie sans beaucoup de choses moelleuses. –