J'ai la classe suivante:Python, types immuables
class MySet(set):
def __init__(self, arg=None):
if isinstance(arg, basestring):
arg = arg.split()
set.__init__(self, arg)
Cela fonctionne comme prévu (initialisant l'ensemble avec les mots de la chaîne plutôt que les lettres). Cependant, quand je veux faire la même chose avec la version immuable de jeu, la méthode __init__
semble être ignoré:
class MySet(frozenset):
def __init__(self, arg=None):
if isinstance(arg, basestring):
arg = arg.split()
frozenset.__init__(self, arg)
Puis-je obtenir quelque chose de similaire avec __new__
?
Je pense que la raison pour laquelle '__new __ (..)' prend l'initiative en matière sculpter des instances de types immuables, c'est tirer parti de l'immuabilité et réserver une opportunité de renvoyer une instance existante si elle est disponible. (Mais si on ne veut pas cet avantage, alors ils peuvent faire un type immuable sans se tromper avec __new __ (..) '. En particulier,' __new __ (..) 'n'offre pas de contexte particulier. avoir à modifier les champs immuables via 'object .__ setattr __ (..)' ou similaire, que ce soit dans __new __ (..) 'ou' __init _ (..) '.) –