2010-04-14 113 views
1

事情是这样的:如何有条件地只记录某些类别的东西?

if self.__class__ == "User": 
       logging.debug("%s non_pks were found" % (str(len(non_pks)))) 

In [2]: user = User.objects.get(pk=1) 

In [3]: user.__class__ 
Out[3]: <class 'django.contrib.auth.models.User'> 

In [4]: if user.__class__ == 'django.contrib.auth.models.User': print "yes" 
    ...: 

In [5]: user.__class__ == 'django.contrib.auth.models.User' 
Out[5]: False 

In [6]: user.__class__ == 'User' 
Out[6]: False 

In [7]: user.__class__ == "<class 'django.contrib.auth.models.User'>" 
Out[7]: False 

回答

3

类是第一类对象的Python:

>>> class Foo(object): 
...  pass 
... 
>>> a = Foo() 
>>> a.__class__ == Foo 
True 

注:他们不是字符串,它们是对象。不要与"Foo"进行比较,而要与Foo

2

这应该工作:

if user.__class__.__name__ == 'User': 
+1

为什么要检查类的名称,而不是比较类对象本身? (例如,即使面对不同模块中的同名类时也是如此) – moshez 2010-04-14 21:40:03

+0

你的方法确实比较好,我在寻找字符串,因为他实际上是和他们比较的(upvoted你的)。 – KillianDS 2010-04-14 21:45:31

相关问题