Используйте функцию встроенного getattr
, чтобы получить атрибут объекта по имени. Измените имя по мере необходимости.
obj.spam = 'eggs'
name = 'spam'
getattr(obj, name) # returns 'eggs'
Хорошо, что вы нарушаете спецификацию VM, раздел 4.10 :
Число параметров метода ограничено 255 определением дескриптора метода (§ 4.3.3), где предел включает в себя одну единицу для этого в случае вызовов метода экземпляра или интерфейса. Обратите внимание, что дескриптор метода определяется в терминах понятия длины параметра метода, в котором параметр типа long или double вносит два блока в длину, поэтому параметры этих типов дополнительно уменьшают предел.
Я предлагаю вам преодолеть препятствия при смене сгенерированного кода ... Я очень удивлен, что он работает на Linux, если честно. Я бы не был полностью удивлен, если байт-код, который он сгенерировал, был строго недействителен, и он просто работает для вас в данный момент.
Хотя всегда есть соблазн попытаться найти способы сохранить существующий код и игнорировать ограничения, я думаю, в этом случае вы должны обратить ваше внимание на немедленное уменьшение количества параметров.
Есть две возможности для решения этой проблемы:
Ну, спецификация файла класса . говорит:
Дескриптор метода действителен только в том случае, если он представляет параметры метода с общей длиной 255 или менее, где эта длина включает в себя вклад для этого в случае вызова метода экземпляра или интерфейса. Суммарная длина рассчитывается путем суммирования вкладов отдельных параметров, где параметр типа long или double вносит два блока в длину, а параметр любого другого типа вносит один блок.
BLAH
- это 256-й параметр & quot; и "параметр BLAH превышает предел 255 слов". Учитывая это, я все еще удивляюсь, что это работает где угодно. – Jon Skeet 2 June 2015 в 05:44