2009-02-13 19 views
23

Używam Pythona 2.x i mam obiekt, który przywołuję z eteru; dokumentacja na nim nie jest szczególnie jasna. Chciałbym móc uzyskać listę właściwości dla tego obiektu i typ każdej właściwości.Jak wykonać introspekcję obiektu w Pythonie 2.x?

Podobnie chciałbym uzyskać listę metod dla tego obiektu, jak również wszelkie inne informacje, które mogłem znaleźć na tej metodzie, takie jak liczba argumentów i ich typy.

Mam wrażenie, że po prostu brakuje mi prawidłowego żargonu w moich wyszukiwaniach w Google. Nie chcę wykoleić się ze szczegółami, ale to Active Directory, więc zawsze jest fajnie.

Odpowiedz

24

Cóż ... Twoim pierwszym przystankiem będzie prosty rejs (obiekt). Spowoduje to wyświetlenie wszystkich elementów obiektu, zarówno pól, jak i metod. Wypróbuj go w interaktywnej powłoce w języku Python i graj trochę.

Na przykład:

> class Foo: 
    def __init__(self): 
    self.a = "bar" 
    self.b = 4711 

> a=Foo() 
> dir(a) 
['__doc__', '__init__', '__module__', 'a', 'b'] 
+0

Próbowałem spróbować, ale nie widziałem niektórych właściwości, które wiem, są dostępne. Jest to obiekt Active Directory (ADsNameSpaces, GetObject) i miałem nadzieję, że na liście znajdują się różne atrybuty, takie jak "sn", "cn" itd., Ale nie są. Być może wybrałem niewłaściwy obiekt do tego. –

9

Jak o czymś takim:

>>> o=object() 
>>> [(a,type(o.__getattribute__(a))) for a in dir(o)] 
[('__class__', <type 'type'>), ('__delattr__', <type 'method-wrapper'>), 
('__doc__', <type 'str'>), ('__format__', <type 'builtin_function_or_method'>), 
('__getattribute__', <type 'method-wrapper'>), ('__hash__', <type 'method-wrapper'>), 
('__init__', <type 'method-wrapper'>), 
('__new__', <type 'builtin_function_or_method'>), 
('__reduce__', <type 'builtin_function_or_method'>), 
('__reduce_ex__', <type 'builtin_function_or_method'>), 
('__repr__', <type 'method-wrapper'>), ('__setattr__', <type 'method-wrapper'>), 
('__sizeof__', <type 'builtin_function_or_method'>), 
('__str__', <type 'method-wrapper'>), 
('__subclasshook__', <type 'builtin_function_or_method'>)] 
>>> 

Sposób bardziej zorganizowany będzie używać inspect module:

sprawdzić moduł oferuje kilka przydatnych funkcji aby uzyskać informacje na temat obiektów na żywo, takich jak moduły, klasy, metody, funkcje, informacje zwrotne, objec ramki ts i obiekty kodu. Na przykład może pomóc w zbadaniu zawartości klasy, pobrać kod źródłowy metody, wyodrębnić i sformatować listę argumentów dla funkcji lub uzyskać wszystkie informacje potrzebne do wyświetlenia szczegółowych informacji zwrotnych.

+0

To dość nieprzyjemne, jeśli chodzi o rzeczy z getattribute. Znacznie lepiej jest użyć wbudowanego getattr(). –

+1

zapraszam do zastąpienia o .__ getattribute __ (a) z getattr (o, a) – gimel

3

Możesz rzucić okiem na inspect module. Zapewnia szeroką gamę narzędzi do kontroli obiektów na żywo, a także kodu źródłowego.

0

Jeśli używasz win32com.client.Dispatch, inspekcja obiektu Python może nie być zbyt użyteczna, ponieważ jest to ogólne opakowanie dla IDispatch.

Możesz użyć makepy (który jest dostarczany z Activestate Python), aby wygenerować opakowanie Pythona z biblioteki typów. Następnie możesz spojrzeć na kod opakowania.

Powiązane problemy