2011-10-30 14 views
12

me gustaría definir una propiedad Python fuera de una definición de clase:¿Cómo puedo definir una propiedad de Python * fuera * de una definición de clase?

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

pero me da el siguiente error:

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

¿Cuál es la sintaxis correcta para definir una propiedad fuera de una definición de clase?

Editar: Estoy 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() 

Respuesta

12

instancias de Object como c no pueden tener propiedades; solo las clases como C pueden tener propiedades. Así que hay que establecer la propiedad de la clase, no es el caso, porque Python sólo busca en la clase:

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

Hm, lo he intentado, pero me sale este error: AttributeError: objeto 'thread._local' no tiene atributo 'usuario' –

+1

Si obtiene * ese * error, entonces significa que este problema tiene más partes móviles de las que ha estado dispuesto a admitir en su pregunta. :) Por favor, muéstrenos el código real y las declaraciones y bibliotecas de 'importación' que está usando. ¡A cambio, le mostraremos por qué está recibiendo un error local de subprocesos! –

+0

Ver mi edición anterior. –

Cuestiones relacionadas