2011-10-30 12 views
12

vorrei definire una proprietà Python esterna di una definizione di classe:Come definire una proprietà Python * al di fuori * di una definizione di classe?

c = C() 
c.user = property(lambda self: User.objects.get(self.user_id)) 
print c.user.email 

Ma io ottenere il seguente errore:

AttributeError: 'property' object has no attribute 'email' 

Qual è la sintassi corretta per la definizione di una proprietà al di fuori di una definizione di classe?

Edit: sto usando lettuce

from lettuce import * 
from django.test.client import Client 
Client.user_id = property(lambda self: self.browser.session.get('_auth_user_id')) 
Client.user = property(lambda self: User.objects.get(self.user_id)) 

@before.each_scenario 
def set_browser(scenario): 
    world.browser = Client() 

risposta

12

casi oggetto come c non può avere proprietà; solo le classi come C possono avere proprietà. Quindi è necessario impostare la proprietà sulla classe, non è l'istanza, perché Python cerca solo sulla classe:

C.user = property(lambda self: User.objects.get(self.user_id)) 
+0

Hm, ho provato ma ottengo questo errore: AttributeError: oggetto 'thread._local' non ha attributo 'utente' –

+1

Se ottieni * quell'errore *, significa che questo problema ha più parti mobili di quelle che hai voluto ammettere nella tua domanda. :) Per favore mostraci il tuo codice attuale e quali istruzioni e librerie 'import' stai usando. In cambio, ti mostreremo perché stai riscontrando un errore locale del thread! –

+0

Vedere la mia modifica sopra. –

Problemi correlati