Есть ли способ определить функцию, которая будет глобальной изнутри класса (или изнутри другой функции, по сути)? Что-то похожее на определение глобальной переменной.Как определить глобальную функцию в Python?
ответ
Функции добавляются в текущее пространство имен, как и любое другое имя. Это означает, что вы можете использовать ключевое слово global
внутри функции или метода:
def create_global_function():
global foo
def foo(): return 'bar'
То же самое относится к классу тела или метода:
class ClassWithGlobalFunction:
global spam
def spam(): return 'eggs'
def method(self):
global monty
def monty(): return 'python'
с той разницей, что spam
будет определяться сразу же ТОП- при импорте.
Как и все виды использования global
, вы, вероятно, захотите переосмыслить проблему и найти другой способ ее решения. Вы могли бы вернуть функцию, созданную таким образом, например.
Демо:
>>> def create_global_function():
... global foo
... def foo(): return 'bar'
...
>>> foo
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'foo' is not defined
>>> create_global_function()
>>> foo
<function foo at 0x102a0c7d0>
>>> foo()
'bar'
>>> class ClassWithGlobalFunction:
... global spam
... def spam(): return 'eggs'
... def method(self):
... global monty
... def monty(): return 'python'
...
>>> spam
<function spam at 0x102a0cb18>
>>> spam()
'eggs'
>>> monty
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'monty' is not defined
>>> ClassWithGlobalFunction().method()
>>> monty()
'python'
@flamenco: Я действительно предполагал, что OP означает * из метода в классе *. Не из самого класса класса. В любом случае то же самое относится и к использованию оператора в классе определения класса, но я бы скорее сказал, почему вы хотите сделать это *. –
@flamenco: Код в моем предыдущем ответе четко объясняет, что вы не являетесь оберточной функцией. –
@flamenco: изменяющиеся глобальные значения не являются потокобезопасными и могут легко привести к * очень * запутанному коду. Изменение функций таким образом, тем более. –
Вы можете использовать глобальные объявить глобальную функцию из класса. Проблема с этим заключается в том, что вы не можете использовать его с областью класса, чтобы он мог объявить его вне класса.
class X:
global d
def d():
print 'I might be defined in a class, but I\'m global'
>> X.d
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'X' object has no attribute 'd'
>> d()
I might be defined in a class, but I'm global
, пожалуйста, объясните downvote –
Так что я не размещал более 4 раз в stackoverflow. Большая сделка? Ответ, тем не менее, объясняет вам, как это сделать, и родная проблема, связанная с вопросом. –
вне класса походит на нарушение принципа инкапсуляции OOPS. Однако метод, объявленный как глобальный, может быть вызван другими методами внутри класса, но на любом объекте класса. В этом случае «глобальное» слово действительно не имеет смысла. Его более локальный (закрытый в java-терминах), чем глобальный, поскольку только методы класса могут получить доступ к этому методу, объявленному как глобальный. Все это означает, что это условный сценарий. Я считаю, что этот аспект нуждается в исправлении в python – Rags
- 1. Как определить новую глобальную функцию в javascript
- 2. Как определить глобальную переменную python?
- 3. Как определить глобальную переменную в python?
- 4. Как определить функцию python
- 5. Определить глобальную функцию внутри анонимной функции самоисполнения?
- 6. Как определить «глобальную» структуру?
- 7. как определить глобальную функцию, которая имеет параметр события в Lua
- 8. Как найти глобальную функцию?
- 9. , определяющий глобальную функцию в kohana
- 10. Как определить, какой объект/класс вызывает глобальную функцию Swift?
- 11. Как определить глобальную переменную (значение) в codeIgniter
- 12. Почему Python 2.6 добавил глобальную функцию next()?
- 13. Как определить глобальную переменную в Python из внешнего класса?
- 14. Как определить глобальную переменную с разными значениями в python
- 15. Как определить глобальную настраиваемую RoutedCommand?
- 16. Как определить периодическую функцию в python?
- 17. Как определить нулевую функцию в python?
- 18. Определить глобальную константу в Matlab
- 19. Как изменить глобальную переменную через функцию?
- 20. Создать глобальную функцию ASP.NET?
- 21. определить глобальную карту константного
- 22. Сделать глобальную функцию в webpack
- 23. Преобразование функции в глобальную функцию
- 24. Определить функцию/глобальную переменную только при первом запуске
- 25. Как определить глобальную собственность в носороге?
- 26. Как определить глобальную переменную класса в Swift
- 27. Как определить глобальную переменную в codeigniter?
- 28. Как определить глобальную область переменных в Twig
- 29. Как определить глобальную переменную в Cocoa Framework
- 30. Как определить глобальную переменную в extjs 3.4
Зачем вам это вообще нужно? –
Вы можете назначить глобальную переменную функцию, определенную локально, если это то, что вы имеете в виду. – khelwood
Я полагаю, вы могли бы использовать 'global foo' и' def'/'class foo' для этого ... – Kevin