2010-04-14 108 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

相關問題