2015-11-25 3 views
0

я могу получить доступ к func_dict функций легко, если я пишу свое имя в нем:Как получить доступ к функции func_dict? Существует ли эквивалент «я» для функций?

def func(a): 
    print('{} {}'.format(func.prefix, a)) 

func.prefix = 'something' 
func(4) 

Есть ли способ, что я могу получить доступ к prefix без необходимости писать func снова, подобно self метод класса?

+0

Вы уверены, что 'func' не должен быть методом класса вместо этого? – chepner

+1

Или, может быть, префикс должен быть аргументом со значением по умолчанию? – chepner

+0

Честно говоря, лучшее решение (которое не требует обмана с бессмыслицей, например, добавление аргумента 'self' к функции) по умолчанию, чтобы сделать вызываемый класс в соответствии с [вторым ответом] (https://stackoverflow.com/a/3109542/364696) по [связанному вопросу] (https://stackoverflow.com/questions/3109289/how-can-python-function-access-its-own-attributes). Вы можете даже делать дополнительные трюки, например, назначать значения на уровне определения класса, а затем говорить «func = func()», который заменит определение класса одним экземпляром класса (который имеет «self», который может получить доступ переменные класса). – ShadowRanger

ответ

-1

Вы только что сделали это.

def func(a): 
    print('{} {}'.format(func.prefix,a)) 

Если вы называете это само по себе, не устанавливая prefix вы получите AttributeError, поскольку префикс не был определен

Определяя func.prefix='something', теперь, когда вы звоните func(4) вы получите something 4 как выход. И вы можете просто сохранить redefining func.prefix, и он обновит Attribute в func.

Если у вас есть что-то еще по вашему вопросу, вы уже сделали это правильно.

+1

Нет смысла отвечать, если больше нечего добавить. Я думаю, что более важный вопрос здесь заключается в том, как получить доступ к пространству имен без использования имени функции, так что если переименовать 'func()' все внутренние ссылки будут работать без необходимости их изменения. – Jkdc

+0

Jkdc прав, это была моя точка. –

 Смежные вопросы

  • Нет связанных вопросов^_^