Istniejące odpowiedzi zrobić dobrą robotę pokazując, w jaki sposób uzyskać atrybutów obiektu, ale nie dokładnie odpowiedzieć na pytanie postawione wy - Jak uzyskać metodami obiektu. Obiekty Pythona mają ujednoliconą przestrzeń nazw (inaczej niż w Ruby, gdzie metody i atrybuty korzystają z różnych przestrzeni nazw). Rozważmy na przykład:
((podział produkcji dla czytelności)).
Jak widać, to daje Ci nazwy wszystkich atrybutów - w tym dużą ilością specjalnych metod, które są po prostu odziedziczonych object
specjalne dane atrybuty takie jak __class__
, __dict__
i __doc__
dane per-instancji atrybutów (val
) , atrybuty wykonywalne na instancję (lam
), a także rzeczywiste metody.
Jeśli i kiedy trzeba być bardziej selektywny, spróbuj:
>>> import inspect
>>> [n for n, v in inspect.getmembers(x, inspect.ismethod)]
['__init__', 'clame', 'meth']
Standardowy moduł biblioteki inspect
jest najlepszym sposobem na introspekcji w Pythonie: buduje na górze wbudowanej haków introspekcji (takie jako dir
i bardziej zaawansowane), aby zaoferować użyteczne, bogate i proste usługi introspekcji. Na przykład widać, że są wyświetlane tylko metody instancji i klasy specjalnie zaprojektowane przez tę klasę - a nie metody statyczne, a nie atrybuty instancji niezależnie od tego, czy można je wywoływać czy nie, a nie specjalne metody odziedziczone po object
. Jeśli Twoje potrzeby w zakresie selektywności są nieco inne, możesz łatwo zbudować własną ulepszoną wersję ismethod
i przekazać ją jako drugi argument getmembers
, aby dopasować wyniki do swoich dokładnych, dokładnych potrzeb.
działa! dziękuję – potlee