2010-04-14 3 views
1

Quelque chose comme ceci:Comment est-ce que je peux seulement consigner conditionnellement quelque chose si c'est une certaine classe?

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 

Répondre

3

Les classes sont des objets de première classe en Python:

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

Note: ils ne sont pas des chaînes, ils sont objets. Ne pas comparer à "Foo" mais à Foo

2

Cela devrait fonctionner:

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

Pourquoi vérifiez-vous le nom de la classe, plutôt que de comparer les objets de classe eux-mêmes? (Cela fonctionne même face à des classes portant le même nom dans différents modules, par exemple) – moshez

+0

Votre méthode est meilleure en effet, je cherchais des cordes car il les comparait réellement avec elles (upvoted les vôtres). – KillianDS

Questions connexes