Как напечатать переменную Dynami c? - PullRequest
0 голосов
/ 10 июля 2020

Я новичок в Python, и у меня проблема: в пакете, который я использую, есть команда, которую я могу вспомнить следующим образом: example.D1, example.D2, изменение номера следующий за D. Я хочу создать al oop для печати всех результатов с номером, следующим за D, от 1 до 100.

Я пробовал с

for i in range(1, 100):
    print(example.Di)

и ошибка raise AttributeError("'*' has no attribute '%s'" % name) AttributeError: '*' has no attribute 'Di'

Как я могу вернуть эту команду "loopable"?

Надеюсь, мое описание понятно, спасибо

Ответы [ 3 ]

2 голосов
/ 10 июля 2020

Вы можете использовать eval (не рекомендуется), обращаться к локальным переменным с помощью locals() (зависит от контекста) или предпочтительно использовать метод getattr для доступа к переменным экземпляра класса example:

for i in range(1, 100):
    print(getattr(example, 'D{0}'.format(i)))

Если вы хотите вернуть специфицированное c значение, если Di не существует, вы можете добавить его в качестве возвращаемого значения по умолчанию к getattr, fi вернет строку 'variable Di not found'.

for i in range(1, 100):
    print(getattr(example, 'D{0}'.format(i), 'variable D{0} not found'.format(i)))
1 голос
/ 10 июля 2020

Вы можете использовать f-strings , что является улучшенным способом использования str.format ()

for i in range(1, 100):
    print(getattr(example, f'D{i}'))
1 голос
/ 10 июля 2020

Вы можете распечатать состояние / атрибуты вашего объекта (экземпляра класса) множеством способов, одним из них является встроенный getattr

def get_attributes_of_object(obj):
  for attr in dir(obj):
    print("obj.%s = %r" % (attr, getattr(obj, attr)))

с помощью inspect модуль

Модуль проверки предоставляет несколько полезных функций, помогающих получить информацию о живых объектах, таких как модули, классы, методы, функции, трассировки ..

используйте метод ниже:

inspect.getmembers(object[, predicate])

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

name_value_pairs_list = inspect.getmembers(Di)
...