Python - возможно ли определить метод экземпляра внутри другого метода экземпляра? - PullRequest
0 голосов
/ 10 мая 2018

Можно ли сделать что-то подобное? (Этот синтаксис на самом деле не работает)

class TestClass(object):
    def method(self):
        print 'one'
        def dynamically_defined_method(self):
            print 'two'

c = TestClass()
c.method()
c.dynamically_defined_method() #this doesn't work

Если это возможно, это ужасная практика программирования? То, что я действительно пытаюсь сделать - это вызвать одну из двух вариаций одного и того же метода (с одинаковыми именами и подписями) в зависимости от состояния экземпляра.

1 Ответ

0 голосов
/ 10 мая 2018

Определение функции в методе не делает ее автоматически видимой для экземпляра - это просто функция, которая предназначена для использования в методе.

Чтобы разоблачить это, у вас возникнет соблазн сделать:

self.dynamically_defined_method = dynamically_defined_method

Только это не работает:

TypeError: dynamically_defined_method() takes exactly 1 argument (0 given)

Вы должны пометить функцию как метод (что мы делаем с помощью MethodType). Таким образом, полный код для этого выглядит следующим образом:

from types import MethodType

class TestClass(object):
    def method(self):
        def dynamically_defined_method(self):
            print "two"
        self.dynamically_defined_method = MethodType(dynamically_defined_method, self)

c = TestClass()
c.method()
c.dynamically_defined_method()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...