Sto leggendo le classi in Python (3.4) e da quello che ho capito sembra che ogni nuovo oggetto abbia le proprie istanze dei metodi associati.Python crea davvero tutto il metodo associato per ogni nuova istanza?
class A:
def __init__(self, name):
self.name = name
def foo(self):
print(self.name)
a = A('One')
b = A('Two')
print(a.foo == b.foo)
L'output di questo è False
.
Questo mi sembra uno spreco di memoria. Ho pensato che internamente a.foo
e b.foo
puntassero in qualche modo internamente a una funzione in memoria: A.foo
dove self
verrà passata l'istanza della classe.
Suppongo che questo non possa essere implementato facilmente nella lingua.
Ogni nuova istanza contiene anche nuove istanze dei relativi metodi associati?
In tal caso, ciò non pregiudica le prestazioni o crea spazio per la creazione di nuovi oggetti con maggiore cautela rispetto alle altre lingue in cui i metodi sono "condivisi" tra oggetti come in Java
?
Puoi collegare a qualcosa che hai letto che ti fa pensare che? –
@SotiriosDelimanolis 'X(). F == X.f' genererà' False' (dove f è un metodo di instace). Questo è abbastanza per far pensare in questo modo. –
Ogni metodo associato, tuttavia, fa riferimento alla stessa funzione sottostante. L'overhead di memoria per i wrapper è minimo. – chepner