Задать вопрос
@Herest

Как вызвать все атрибуты объекта через цикл?

Приветствую!

В языке Python существует такая полезная функция, как dir(). Если аргументом передать ей имя класса или объекта, то она отобразит список допустимых свойств и методов этого объекта.
import re
print(dir(re))

>>> ['A', 'ASCII', 'DEBUG', 'DOTALL', 'I', 'IGNORECASE', 'L', ...]

Раз мы получаем список, значит его можно перебрать в цикле:
import re
for item in dir(re):
    print(item)

>>>
A
ASCII
DEBUG
DOTALL
I
...

Отлично, это работает.
Но теперь я бы хотел в цикле вызвать каждый атрибут этого объекта и получить результат:
import re
for item in dir(re):
    print(item, re.item)

>>> AttributeError: module 're' has no attribute 'item'

Увы, имя переменной интерпретатор воспринимает буквально за название атрибута, что приводит к ошибке.
Подскажите, пожалуйста, как можно это исправить?
  • Вопрос задан
  • 665 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 2
@dmshar
А какое-бы значение атрибута вы бы хотели получить, обращаясь к классу, а не к объекту??

А вообще-то, например, вот так:

import numpy as np
arr=np.empty(10)
for item in dir(arr):
    print(item, getattr(arr,item))


Ну, или что-бы хоть немного просеять тот шлак, который от такого весьма странного действия вы получите, можно сделать вот так:

interesting_methods = [method for method in dir(arr) if method.startswith('__') is False]   
for item in interesting_methods:
    print(item, getattr(arr,item))


Тоже, конечно, не понятно, что вы с этой информацией делать то собираетесь, но в выдаче, если порыться, можно найти осмысленную информацию, которую вы как бы проверяете.
Ответ написан
Core2Quad777
@Core2Quad777
Есть такая функция, как getattr()
import re
for item in dir(re):
    print(getattr(re, item))
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы