[Python] exporting di classi
efphe
effetom a gmail.com
Ven 1 Dic 2006 15:41:30 CET
Manlio Perillo wrote:
> Federico Tomassini ha scritto:
>> Ciao a tutti,
>>
>> ho un dubbio sui python internal.
>> Ecco la situazione; ho due classi:
>>
>> ###
>> class Foo:
>> def __init__(self):
>> self.x= 0
>> def inc(self):
>> self.x+= 1
>>
>> class Bar:
>> def __init__(self):
>> self.x= 0
>>
>> foo=Foo()
>> bar=Bar()
>> ###
>>
>> Poi, eseguo cio' che chiamo un'exporting di classe:
>>
>> ###
>> attr= getattr(foo, 'inc')
>> setattr(bar, 'inc', attr)
>> ###
>>
>> In questo modo la classe `bar` avra' il metodo 'inc',
>> richiamabile tramite `self.inc`.
>>
>> Se a questo punto qualcuno si chiedesse perche' non
>> eredito, la risposta e' la seguente: l'ereditarieta'
>> costringe, per ogni classe, a inizializzare un nuovo
>> padre; queso in genere non e' un problema, ma nel mio
>> caso voglio che le mie classi utilizzino tutte lo
>> *stesso padre*, e non un' istanza ciascuna.
>>
>
> In Python la classe base non è inizializzata a meno che non lo richieda
> tu esplicitamente.
Mi sembrava che la frase:
"""
ma nel mio caso voglio che le mie classi utilizzino
tutte lo *stesso padre*
"""
fosse chiara.
Il problema non sta nell'inizializzazione, e non si
aggira non inizializzando nulla.
Mi spiego in altre parole: ho bisogno di *un*'istanza
Foo che venga utilizzata da *ogni* istanza Bar, in modo
che l'istanza Foo sia condivisa, persistente e shared
per ogni classe Bar.
Al tempo stesso, mi chiedo se sia possibile (di certo
lo e', basta fare abbastanza hack) e come possa essere
implementato un meccanismo di "esportazione di tipo
ereditaria": il metodo inc, in altre parole, dovrebbe
inizializzare il primo argomento (self) a Bar.bar e non
a Foo.foo.
Ma attenzione, se ho due istanza Bar, B e C, devo avere:
memory_address(B.inc)= memory_address(C.inc)
--
efphe
Maggiori informazioni sulla lista
Python