[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