имя метода переменной Python - PullRequest
8 голосов
/ 20 августа 2011

Как вы можете выполнить метод, дав его имя, из другого метода, который находится в том же классе, что и вызываемый метод? Как это:

class Class1:
    def __init__(self):
        pass
    def func1(self, arg1):
        # some code
    def func2(self):
        function = getattr(sys.modules[__name__], "func1") # apparently this does not work

Есть предложения?

Ответы [ 2 ]

9 голосов
/ 20 августа 2011

как насчет getattr(self, "func1")? Также избегайте использования функции name

Например:

>>> class C:
...  def f1(self, arg1): print arg1
...  def f2(self): return getattr(self, "f1")
... 
>>> x=C()
>>> x.f2()(1)
1
5 голосов
/ 20 августа 2011

Вы должны получить атрибут из класса, а не из модуля.

def func2(self):
    method = getattr(self, "func1")
    method("arg")

Но вы также должны проверить, что он вызывается.

if callable(method):
    method("arg")

Это позволит избежать вызова чего-либо, что выне ожидал получить.Вы можете вызвать собственное исключение, если оно не вызывается.

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