2011-10-30 24 views
12

我想定义之外的类定义的一个Python属性如何定义类定义之外的Python属性* *?

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

,但我得到了以下错误:

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

什么是定义之外的财产正确的语法一个类的定义?

编辑:我使用的是像clettuce

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() 

回答

12

对象实例不能具有的属性;只有像C这样的课程可以具有属性。所以你需要设置类的属性,而不是实例,因为Python只在类中寻找它:

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

嗯,我试过,但我得到这个错误:AttributeError:'thread._local'object没有属性'user' –

+1

如果你得到* that *错误,那么这意味着这个问题有更多的移动部分比你在你的问题中愿意承认的更多。 :)请向我们展示实际的代码以及您正在使用的“import”语句和库。作为回报,我们会告诉你为什么你得到一个线程本地错误! –

+0

看到我上面的编辑。 –