Étant donné le module suivant:pourquoi python inspect.isclass pense qu'une instance est une classe?
class Dummy(dict):
def __init__(self, data):
for key, value in data.iteritems():
self.__setattr__(key, value)
def __getattr__(self, attr):
return self.get(attr, None)
__setattr__=dict.__setitem__
__delattr__=dict.__delitem__
foo=Dummy({"one":1, "two":2})
pourquoi ne foo
apparaître dans la sortie de inspect.getmembers(..., predicate=inspect.isclass)
?
$ python2.5
Python 2.5.2 (r252:60911, Aug 28 2008, 13:13:37)
[GCC 4.1.2 20071124 (Red Hat 4.1.2-42)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import junk
>>> import inspect
>>> inspect.getmembers(junk, predicate=inspect.isclass)
[('Dummy', <class 'junk.Dummy'>), ('foo', {'two': 2, 'one': 1})]
>>> inspect.isclass(junk.foo)
True
Je m'y attendais inspect
ne reviendrait Dummy
puisque c'est la seule définition de classe dans le module. Apparemment, cependant, junk.foo est une classe aux yeux du module d'inspection. Pourquoi donc?
En particulier, le manque de 'AttributeError' qui causera vraiment bugs __horrible__ vraiment stupéfiant. – katrielalex
Merci. Votre explication prend tout son sens. –