Sto implementando un oggetto che è quasi identico a un set, ma richiede una variabile di istanza aggiuntiva, quindi sto creando una sottoclasse dell'oggetto set integrato. Qual è il modo migliore per assicurarsi che il valore di questa variabile venga copiato quando uno dei miei oggetti viene copiato?Qual è il modo corretto (o migliore) di sottoclasse della classe set Python, aggiungendo una nuova variabile di istanza?
Utilizzando il modulo di vecchi set, il seguente codice ha funzionato perfettamente:
import sets
class Fooset(sets.Set):
def __init__(self, s = []):
sets.Set.__init__(self, s)
if isinstance(s, Fooset):
self.foo = s.foo
else:
self.foo = 'default'
f = Fooset([1,2,4])
f.foo = 'bar'
assert((f | f).foo == 'bar')
ma questo non funziona utilizzando il modulo incorporato set.
L'unica soluzione che riesco a vedere è quella di sovrascrivere ogni singolo metodo che restituisce un oggetto set copiato ... nel qual caso potrei anche non dare fastidio alla sottoclasse dell'oggetto set. Sicuramente esiste un modo standard per farlo?
(Per chiarire, il seguente codice fa non lavoro (l'asserzione fallisce):
class Fooset(set):
def __init__(self, s = []):
set.__init__(self, s)
if isinstance(s, Fooset):
self.foo = s.foo
else:
self.foo = 'default'
f = Fooset([1,2,4])
f.foo = 'bar'
assert((f | f).foo == 'bar')
)
questo è un contributo utile, grazie. non sembra che tu stia guadagnando molto rendendo _wrap_methods un metodo di classe piuttosto che una funzione - è puramente per la modularità che dà? – rog
Questo è davvero fantastico, grazie per il contributo perspicace! – bjd2385