2011-10-30 13 views
12

chciałbym zdefiniować właściwość Pythona poza definicji klasy:Jak zdefiniować właściwość Python * poza * definicji klasy?

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

Ale pojawia się następujący błąd:

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

jaka jest poprawna składnia do definiowania własności poza definicja klasy?

Edycja: używam 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() 

Odpowiedz

12

instancji obiektów jak c nie mogą mieć właściwości; tylko klasy takie jak C mogą mieć właściwości. Więc trzeba ustawić właściwość na klasy, a nie instancji, ponieważ Python tylko wygląda na to od klasy:

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

Hm, próbowałem tego, ale mam ten błąd: AttributeError: „” obiekt thread._local nie ma atrybutu "użytkownik" –

+1

Jeśli dostaniesz * ten * błąd, oznacza to, że ten problem ma więcej ruchomych części, niż byłeś skłonny przyznać się w swoim pytaniu. :) Pokaż nam aktualny kod i instrukcje 'import' oraz biblioteki, których używasz. W zamian pokażemy, dlaczego otrzymujesz błąd lokalny wątku! –

+0

Zobacz moją edycję powyżej. –

Powiązane problemy