He la clase siguiente:Python, tipos de subclases inmutables
class MySet(set):
def __init__(self, arg=None):
if isinstance(arg, basestring):
arg = arg.split()
set.__init__(self, arg)
Esto funciona como se esperaba (inicializar el sistema con las palabras de la cadena en lugar de las letras). Sin embargo, cuando quiero hacer lo mismo con la versión inmutable de conjunto, el método __init__
parece ser ignorado:
class MySet(frozenset):
def __init__(self, arg=None):
if isinstance(arg, basestring):
arg = arg.split()
frozenset.__init__(self, arg)
puedo lograr algo similar con __new__
?
Creo que la razón de que '__new __ (..)' toma la iniciativa cuando se trata de esculpir instancias de tipos inmutables es aprovechar la inmutabilidad y reservar una oportunidad para devolver una instancia existente, si está disponible. (Pero si uno no quiere esa ventaja, entonces podría hacer un tipo inmutable sin jugar con '__new__ (..)'. En particular, '__nuevo __ (..)' no ofrece ningún contexto especial. tiene que modificar los campos inmutables a través de 'object .__ setattr __ (..)' o similar, ya sea dentro de '__new __ (..)' o '__init _ (..)'.) –