2009-03-26 7 views
25

Czy istnieje funkcja w języku Python do wyświetlania atrybutów i metod danego obiektu?Czy w Pythonie istnieje funkcja do wyświetlenia atrybutów i metod danego obiektu?

Coś jak:

ShowAttributes (myObject) 

    -> .count 
    -> .size 

ShowMethods (myObject) 

    -> len 
    -> parse 
+0

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

+0

I to też: http://stackoverflow.com/questions/192109/ is-there-a-function-in-python-to-print-all-current-properties-and-values-of-a –

+0

['property'] (https://docs.python.org/ 2/library/functions.html? Highlight = property # property) to nazwa nadana innej koncepcji w pythonie. termin "atrybut" bardziej Ci odpowiada. dogłębna lektura, która mi się podoba, o obu jest http://www.cafepy.com/article/python_attributes_and_methods/python_attributes_and_methods.html – n611x007

Odpowiedz

42

Chcesz spojrzeć na funkcję dir():

>>> li = [] 
>>> dir(li)  
['append', 'count', 'extend', 'index', 'insert', 
'pop', 'remove', 'reverse', 'sort'] 

li jest lista, więc dir(li) zwraca listę wszystkich metod listy. Zwróć uwagę, że zwrócona lista zawiera nazwy metod jako łańcuchy, a nie same metody.


Edytowanie w odpowiedzi na komentarz:

Nie będzie to pokazać wszystkie odziedziczone metody, jak również. Rozważmy następujący przykład:

test.py:

class Foo: 
    def foo(): pass 

class Bar(Foo): 
    def bar(): pass 

interpreter Pythona:

>>> from test import Foo, Bar 
>>> dir(Foo) 
['__doc__', '__module__', 'foo'] 
>>> dir(Bar) 
['__doc__', '__module__', 'bar', 'foo'] 

Należy pamiętać, żePython's documentation Zjednoczone:

Uwaga: Ponieważ dir() jest dostarczany głównie dla wygody użytkowania w interaktywny szybka, próbuje dostarczać interesujący zbiór nazw więcej niż stara się dostarczyć rygorystycznie lub konsekwentnie zdefiniowanego ustaw nazw, , a szczegółowe zachowanie może ulec zmianie w wersjach. W przypadku przykładu atrybuty metaclass nie są na liście wyników, gdy argument jest klasą.

Dlatego nie jest bezpiecznie używać w swoim kodzie. Zamiast tego użyj vars(). Vars() nie zawiera informacji o superklasach, musisz je odebrać osobiście.


Jeśli używasz dir() znaleźć informacje w interaktywny interpreter, rozważyć zastosowanie help().

+0

To również wymienia metody bezpośrednio odnoszące się do tego typu obiektu, a nie jego klasy macierzystej lub rodzica macierzystego, prawda? –

+0

Nie, również metody dziedziczone - zapoznaj się z moją edycją. –

+0

dzięki, nauczyłem się również z tego. –

10

Nie dir() i Vars() Ci odpowiadać?

+0

Niesamowite, nie wiedziałem o tym. –

+1

Każdy musi przeczytać ten http://docs.python.org/library/functions.html zaraz po przeczytaniu samouczka w języku Python. – Anonymous

1

Innym sposobem na to jest ze świetnym środowiskiem IPython. Pozwala na pełne wykrycie wszystkich metod i pól obiektu.

8

oraz sposób bardziej czytelnej dla człowieka, można użyć see:

In [1]: from see import see 
In [2]: x = "hello world!" 
In [3]: see(x) 
Out[3]: 
    [] in + * % < <= == != > >= hash() help() len() 
    repr() str() .capitalize() .center() .count() .decode() 
    .encode() .endswith() .expandtabs() .find() .format() .index() 
    .isalnum() .isalpha() .isdigit() .islower() .isspace() .istitle() 
    .isupper() .join() .ljust() .lower() .lstrip() .partition() 
    .replace() .rfind() .rindex() .rjust() .rpartition() .rsplit() 
    .rstrip() .split() .splitlines() .startswith() .strip() 
    .swapcase() .title() .translate() .upper() .zfill() 
+0

superb! jedną rzecz, za którą tęsknię, jest to, że nie można uzyskać 'help()' lub '__doc__' dla czegoś takiego jak' <= ', więc powinieneś już wiedzieć, co robisz, odnośnie operatorów. cóż, jeśli nie znasz ich magicznych metod z głowy. :) w sumie drobny problem i świetny pakiet! – n611x007

1

Zaskakujące jest dla mnie, że nikt nie wspomniał o obiektu funkcji Pythona:
keys()

+1

Tak, to zaskakujące: str –

Powiązane problemy