2009-06-05 8 views
2

Wie finden Sie dynamisch heraus, welche Funktionen von einer Instanz einer Klasse definiert wurden?Welche Funktionen sind in einer Klasseninstanz in Python verfügbar?

Zum Beispiel:

class A(object): 
    def methodA(self, intA=1): 
     pass 

    def methodB(self, strB): 
     pass 

a = A() 

Idealerweise möchte ich, um herauszufinden, dass die Instanz ‚a‘ hat methodA und methodeB, und welche Argumente sie nehmen?

+0

Siehe http://stackoverflow.com/questions/546337/how-do-i-perform-introspection-on-an-object-in-python-2-x –

Antwort

12

Schauen Sie sich das Modul inspect an.

>>> import inspect 
>>> inspect.getmembers(a) 
[('__class__', <class '__main__.A'>), 
('__delattr__', <method-wrapper '__delattr__' of A object at 0xb77d48ac>), 
('__dict__', {}), 
('__doc__', None), 
('__getattribute__', 
    <method-wrapper '__getattribute__' of A object at 0xb77d48ac>), 
('__hash__', <method-wrapper '__hash__' of A object at 0xb77d48ac>), 
('__init__', <method-wrapper '__init__' of A object at 0xb77d48ac>), 
('__module__', '__main__'), 
('__new__', <built-in method __new__ of type object at 0x8146220>), 
('__reduce__', <built-in method __reduce__ of A object at 0xb77d48ac>), 
('__reduce_ex__', <built-in method __reduce_ex__ of A object at 0xb77d48ac>), 
('__repr__', <method-wrapper '__repr__' of A object at 0xb77d48ac>), 
('__setattr__', <method-wrapper '__setattr__' of A object at 0xb77d48ac>), 
('__str__', <method-wrapper '__str__' of A object at 0xb77d48ac>), 
('__weakref__', None), 
('methodA', <bound method A.methodA of <__main__.A object at 0xb77d48ac>>), 
('methodB', <bound method A.methodB of <__main__.A object at 0xb77d48ac>>)] 
>>> inspect.getargspec(a.methodA) 
(['self', 'intA'], None, None, (1,)) 
>>> inspect.getargspec(getattr(a, 'methodA')) 
(['self', 'intA'], None, None, (1,)) 
>>> print inspect.getargspec.__doc__ 
Get the names and default values of a function's arguments. 

    A tuple of four things is returned: (args, varargs, varkw, defaults). 
    'args' is a list of the argument names (it may contain nested lists). 
    'varargs' and 'varkw' are the names of the * and ** arguments or None. 
    'defaults' is an n-tuple of the default values of the last n arguments. 
>>> print inspect.getmembers.__doc__ 
Return all members of an object as (name, value) pairs sorted by name. 
    Optionally, only return members that satisfy a given predicate. 
+0

gibt es einen Unterschied zwischen inspizieren. getmembers() und dir() –

+0

@Adrian: dir() gibt nur die Namen zurück. inspect.getmembers() gibt auch die tatsächlichen Mitglieder zurück. – RichieHindle

+0

Beachten Sie, dass einige Klassenmigth dynamische Methoden haben, die nicht überprüft werden können - die beste Informationsquelle ist immer noch die Dokumentation. – nosklo

Verwandte Themen