Sono la seguente classe:Python, tipi sottoclasse immutabili
class MySet(set):
def __init__(self, arg=None):
if isinstance(arg, basestring):
arg = arg.split()
set.__init__(self, arg)
Questo funziona come previsto (inizializzazione del set con le parole della stringa piuttosto che le lettere). Tuttavia quando voglio fare lo stesso con la versione immutabile di set, il metodo __init__
sembra essere ignorato:
class MySet(frozenset):
def __init__(self, arg=None):
if isinstance(arg, basestring):
arg = arg.split()
frozenset.__init__(self, arg)
Posso realizzare qualcosa di simile con __new__
?
Penso che il motivo per cui '__new __ (..)' prende l'iniziativa quando si tratta scolpire istanze di tipi immutabili è sfruttare l'immutabilità e riservare l'opportunità di restituire un'istanza esistente, se disponibile. (Ma se uno non vuole quel vantaggio, allora potrebbe fare un tipo immutabile senza scherzare con '__nuovo __ (..)'. In particolare, '__new __ (..)' non offre alcun contesto speciale. modificare i campi immutabili tramite 'oggetto .__ setattr __ (..)' o simile, sia che si trovi all'interno di '__nuovo __ (..)' o '__init _ (..)'.) –