Что означает это (простое?) Выражение в Python? функ (Я) (*) арг - PullRequest
2 голосов
/ 14 июня 2011

Я сталкивался с этим кодом на python,

getattr(self, that)(*args)

что это значит?Я вижу, что getattr вызывается встроенной функцией, передавая текущий объект и этот аргумент, но что (* args) делает после этого?

Вызывается ли это с * args в качестве параметра?

edit: Спасибо всем!

Ответы [ 4 ]

3 голосов
/ 14 июня 2011

Вы на правильном пути.that будет именем метода объекта.getattr() возвращает этот метод (функцию) и затем вызывает его.Поскольку функции являются членами первого класса, их можно передавать, возвращать и т. Д.

3 голосов
/ 14 июня 2011

Вызывает значение, возвращаемое getattr(self, that) с аргументами, указанными в массиве args.

Например, если предположить that = 'thatFunction' и args = [1,2,3], это то же самое, что и

self.thatFunction(1, 2, 3)
2 голосов
/ 14 июня 2011

getattr() выбирает атрибут self, названный строковой переменной that. Возвращаемое значение, то есть атрибут, названный that, затем вызывается с аргументами, заданными итерируемым args.

Предполагая, что that имеет значение "foo", следующие четыре строки эквивалентны:

self.foo(*args)

f = self.foo; f(*args)

f = getattr(self, that); f(*args)

getattr(self, that)(*args)

Использование *args в качестве параметра аналогично использованию всех элементов в args в качестве отдельных параметров.

2 голосов
/ 14 июня 2011

Вызывает метод self, имя которого содержится в that и передает *args в качестве аргументов функции.args - это кортеж, а *args - специальный синтаксис, который позволяет вам вызывать функцию и расширять кортеж в список аргументов.

Предположим, что that содержит строку 'f', а args было (1,2,3), тогда getattr(self, that)(*args) будет эквивалентно:

self.f(1, 2, 3)
...