io voglio essere in grado descrittori usare Python in una classe che ha lo slot ottimizzazione:tramite descrittori di Python con slot
class C(object):
__slots__ = ['a']
a = MyDescriptor('a')
def __init__(self, val):
self.a = val
Il problema che ho è come implementare la classe descrittore al fine di essere in grado di memorizzare valori nell'istanza della classe che richiama l'oggetto descrittore. La soluzione più comune sarebbe simile a quello qui sotto, ma non funziona in quanto "dict" non è più definito quando "slot" viene richiamato nella classe C:
class MyDescriptor(object):
__slots__ = ['name']
def __init__(self, name_):
self.name = name_
def __get__(self, instance, owner):
if self.name not in instance.__dict__:
raise AttributeError, self.name
return instance.__dict__[self.name]
def __set__(self, instance, value):
instance.__dict__[self.name] = value
Dopo averlo eseguito, vedo che 'C .__ dict__' è stato creato. Non è qualcosa che stiamo cercando di evitare? Ad ogni modo, guardando la documentazione '__slots__' sta già usando l'interfaccia descrittore per il suo scopo, quindi questo potrebbe essere veramente difficile. – dhill
Utilizzando Python 3, C ha solo una mappinyproxy e non una dict. Ancora più importante, però, le istanze di C non hanno un '__dict__' – Oz123