Я хочу перебирать методы в классе или обрабатывать объекты класса или экземпляра по-разному в зависимости от имеющихся методов. Как мне получить список методов класса?
Также см:
- Как я могу перечислить методы в модуле Python 2.5?
- Цикл по методам объекта Python / IronPython
- Нахождение методов объекта
- Как мне посмотреть внутри объекта Python?
- Как выполнить самоанализ на объекте в Python 2.x?
- Как получить полный список методов и атрибутов объекта?
- Выясните, какие функции доступны из экземпляра класса в Python?
binding
работает: stackoverflow.com/a/46041480/1959808[f for f in dir(ClassName) if not f.startswith('_')]
или толькоdir(ClassName)
для всегоОтветы:
Пример (перечисление методов
optparse.OptionParser
класса):Обратите внимание, что
getmembers
возвращает список из 2-х кортежей. Первый элемент - это имя члена, второй элемент - это значение.Вы также можете передать экземпляр
getmembers
:источник
inspect.isroutine
может быть более подходящим предикатом;inspect.ismethod
не работает для всех методов объектов.Здесь
dir(theobject)
метод для перечисления всех полей и методов вашего объекта (в виде кортежа) и модуль inspect (при записи codeape) для перечисления полей и методов с их документом (в "" ").Поскольку все (даже поля) могут вызываться в Python, я не уверен, что есть встроенная функция для отображения только методов. Вы можете попробовать , если объект вы получите через
dir
это отозван или нет.источник
Python 3.x ответ без внешних библиотек
исключенный результат:
источник
Скажем, вы хотите знать все методы, связанные с классом списка Просто введите следующее
Выше приведу вам все методы списка класса
источник
print([ m for m in dir(my_class) if not m.startswith('__')])
Попробуйте собственность
__dict__
.источник
__dict__
. Однако у классов есть__dict__
тоже, и это должно отображать методы класса :)Вы также можете импортировать FunctionType из типов и проверить его с помощью
class.__dict__
:источник
and not x.startswith('_')
в конец понимание списка для моего использования, чтобы игнорировать__init__
и частные методы.import
изFunctionType
с помощью лямбды с одноразовойtype()
:type(lambda:0)
isinstance
будет лучше, чемtype(y) == FunctionType
здесь.Обратите внимание, что вам нужно подумать, хотите ли вы, чтобы методы из базовых классов, которые наследуются (но не переопределяются), были включены в результат.
dir()
Иinspect.getmembers()
операции действительно включают методы базового класса, но использование__dict__
атрибута нет.источник
Это также работает:
mymodule.py
В другом файле
вывод:
Из документации по питону:
inspect.isroutine (объект)
источник
Так
Подумайте Python страница 210
источник
Есть такой подход:
При работе с экземпляром класса , возможно, было бы лучше вернуть список со ссылками на методы, а не только с именами¹. Если это ваша цель, а также
import
__init__
) из спискаЭто может быть полезно. В двух словах, для такого класса, как
Мы могли бы проверить получение экземпляра с
Так что вы можете позвонить прямо сейчас:
Case вариант использования:
Я использовал это для модульного тестирования . Был класс, где все методы выполняли вариации одного и того же процесса, что приводило к длительным тестам, каждый из которых был лишь в нескольких шагах от других. СУХОЙ был далекой мечтой.
Я подумал, что у меня должен быть один тест для всех методов, поэтому я сделал итерацию выше.
Хотя я понял, что вместо этого я должен реорганизовать сам код, чтобы он в любом случае был DRY-совместимым ... это все равно может послужить случайной душевной душе в будущем.
источник
Я просто держу это там, потому что ответы с самым высоким рейтингом не ясны .
Это простой тест с не обычным классом на основе Enum.
И это выходные результаты.
Итак, что мы имеем:
dir
предоставить не полные данныеinspect.getmembers
предоставить неполные данные и предоставить внутренние ключи, которые не доступны сgetattr()
__dict__.keys()
обеспечить полный и надежный результатПочему голоса так ошибочны? И где я не прав? А где не правы другие люди, ответы на которые имеют столь низкие голоса?
источник
дает идентичный список как
делает.
источник
Вы можете перечислить все методы в классе Python, используя следующий код
Это вернет список всех имен методов в классе
источник
Если ваш метод «обычный» метод , а не
statimethod
, иclassmethod
т.д.Существует немного взломать я придумал -
Это можно распространить на методы другого типа, изменив «функцию» в
if
условии соответственно.Проверено на python 2.7.
источник
Я знаю, что это старый пост, но только что написал эту функцию и оставлю ее здесь, если кто-то запинается в поисках ответа:
источник
Это всего лишь наблюдение. «кодировать» кажется методом для строковых объектов
Однако, если str1 проверяется на наличие методов, возвращается пустой список
Так что, возможно, я ошибаюсь, но проблема вроде бы не простая.
источник
'a'
это объект, чей типstr
. Вы можете увидеть это, запустивtype('a')
.inspect.getmember()
принимает параметр типа, поэтому вам нужно позвонить,inspect.getmember(str)
чтобы увидеть, что вы ожидаете.вывод
источник
Если вы хотите перечислить только методы класса Python
источник