У меня есть куча функций (вне любого класса), где я установил для них атрибуты, например funcname.fields = 'xxx'
. Я надеялся, что я мог бы получить доступ к этим переменным из функции с self.fields
, но, конечно, он говорит мне:"self" внутри простая функция?
глобальное имя «я» не определен
Итак ... что я могу делать? Есть ли какая-то магическая переменная, к которой я могу получить доступ? Мне нравится __this__.fields
?
Несколько человек спросили «почему?». Вы, вероятно, не согласитесь с моими рассуждениями, но у меня есть набор функций, которые все должны использовать одну и ту же подпись (принимать только один аргумент). По большей части этого одного аргумента достаточно, чтобы выполнить требуемое вычисление. Однако в нескольких ограниченных случаях необходима дополнительная информация. Вместо того чтобы заставить каждую функцию принимать длинный список в основном неиспользуемых переменных, я решил просто установить их в функции, чтобы их можно было легко игнорировать.
Хотя теперь мне кажется, что вы можете использовать **kwargs
в качестве последнего аргумента, если вам не нужны дополнительные аргументы. О хорошо ...
Редактировать: На самом деле, некоторые из функций, которые я не писал, и предпочел бы не изменять, чтобы принимать дополнительные аргументы. Благодаря «передаче» дополнительных аргументов в качестве атрибутов мой код может работать как с моими пользовательскими функциями, которые используют преимущества дополнительных аргументов, так и с сторонним кодом, который не требует дополнительных аргументов.
Спасибо за быстрые ответы :)
Как видите, это можно сделать, но лучший вопрос: почему? * –
@Wayne: Смотрите обновление. – mpen
'** kwargs' * * * возможно, сделает ваше намерение более четким ... и, безусловно, более« pythonic » –