Как я могу использовать анонимную функцию в методе класса в Python (закрытие)? - PullRequest
0 голосов
/ 06 сентября 2010
class Test:

    def somemethod(self):
        def write():
            print 'hello'

        write()

x = Test()
x.somemethod()

write () - это функция, которая будет использоваться несколько раз через somemethod (). somemethod () - единственная функция в классе, которая требует ее использования, поэтому глупо определять ее вне somemethod () Закрытие похоже на путь.

Когда я запускаю этот код, я получаю следующую ошибку:

TypeError: somemethod() takes exactly 2 arguments (1 given)

Что я делаю не так? self передается для записи ()? : /

Ответы [ 2 ]

3 голосов
/ 06 сентября 2010

Я считаю невозможным воспроизвести проблему, о которой вы сообщаете:

>>> class Test(object):
...   def somemethod(self):
...     def write():
...       print 'hello'
...     write()
... 
>>> x = Test()
>>> x.somemethod()
hello
>>> 

поэтому я считаю, что вы, должно быть, сделали какую-то ошибку транскрипции или что-то в этом роде. Что вы видите, когда запускаете именно тот код, который я здесь показываю? (Работает одинаково в Python 2.4, 2.5, 2.6, 2.7 на всех платформах).

0 голосов
/ 06 сентября 2010

Это также работает для меня:

>>> class Test:
...     def somemethod(self):
...         def write():
...             print 'hello'
...         write()
... 
>>> 
>>> x = Test()
>>> x.somemethod()
hello
>>>     

Я думаю, вы можете использовать пробелы и , или ваша идентификация неверна

...