getattr с двумя кортежами после него - PullRequest
0 голосов
/ 19 декабря 2018

Я работаю с базой кода, которая содержит строку, которую я действительно не могу понять:

x, x, z = getattr(ReceiveFile, maxsizes)(input, args)

Так что, если бы в конце не было второго кортежа, это было бы просто

x, y, z = ReceiveFile.maxsizes

Как мне интерпретировать этот кортеж в конце (input, args)?Я не могу так легко запустить этот код и поиграть с отладчиком, чтобы прийти к пониманию ..

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Учитывая строковое значение для переменной maxsizes:

maxsizes = "abc"

следующее

x, x, z = getattr(ReceiveFile, maxsizes)(input, args)

эквивалентно:

x, x, z = ReceiveFile.abc(input, args)

Или словами: У объекта ReceiveFile есть метод с именем maxsizes (то есть ReceiveFile.abc), который вызывается с аргументами input и args.Скобки обозначают не tuple, а вызов функции.

0 голосов
/ 19 декабря 2018

getattr возвращает функцию, которая затем вызывается с input и args в качестве аргументов.Возвращаемое значение этой функции затем распаковывается в x, y и z.

. В более длинном виде оно совпадает с

f = getattr(ReceiveFile, maxsizes)
x, y, z = f(input, args)
.
...