В глубь языка Python


Получение атрибутов с помощью getattr


Вы уже знаете, что . Но вы пока не знаете, что если имя функции становится известно только во время выполнения программы, то ее можно получить с помощью функции getattr.

Пример 2.11. Функция getattr

>>> li = ["Larry", "Curly"] >>> li.pop

1

<built-in method pop of list object at 010DF884> >>> getattr(li, "pop")

2

<built-in method pop of list object at 010DF884> >>> getattr(li, "append")("Moe")

3

>>> li ["Larry", "Curly", "Moe"] >>> getattr({}, "clear")

4

<built-in method clear of dictionary object at 00F113D4> >>> getattr((), "pop")

5

Traceback (innermost last): File "<interactive input>", line 1, in ? AttributeError: 'tuple' object has no attribute 'pop'

Таким образом вы получаете метод pop списка. Обратите внимание, что вы не вызываете его (для этого нужно выполнить li.pop()), а получаете в виде объекта.
Здесь мы также получаем метод pop, но теперь имя метода указано в виде строкового аргумента функции getattr. getattr — очень полезная функция, позволяющая получить любой атрибут любого объекта. В данном случае объектом является список, а его атрибутом — метод pop.
В случае, если вы еще не до конца осознали, насколько это может быть полезным, попробуйте выполнить этот код: значение, возвращаемое функцией getattr является методом, который можно вызвать, как если бы вы просто вызвали li.append("Moe"). Но вы не вызываете метод напрямую — вы указываете имя метода в виде строки.
getattr работает и для словарей.
Теоретически, getattr работает и для кортежей, но , так что getattr сгенерирует исключение независимо от имени атрибута, которое вы дадите.

getattr предназначен не только для встроенных типов данных. Он также работает и для модулей.

Пример 2.12. getattr в apihelper.py

>>> import odbchelper >>> odbchelper.buildConnectionString

1

<function buildConnectionString at 00D18DD4> >>> getattr(odbchelper, "buildConnectionString")

2




Начало  Назад  Вперед



Книжный магазин