2015-03-26 2 views
0

У меня есть класс, который имеет переменную класса и статический метод, и мне нужно, чтобы переменная класса содержала обратный вызов статического метода.Как разрешить переменную класса в python ссылаться на статический метод того же класса?

Класс выглядит:

class Test(object): 
    ref = ???? #this should be my reference 

    @staticmethod 
    def testmethod(anyparam="bla"): 
     print "it works" 

Как я могу это сделать? Возможно ли это?

Я использую Python 2

EDIT: Реальный пример заключается в следующем:

class reg(cmd): 

    bla = { 
     'def': [ ... ], 
     'rem': [ ..., 
      PIPE.return_response(fail_callback=HERE_I_NEED_THE_REF), 
      ... 
     ] 
    } 

    @classmethod 
    def testmethod(cls, aco): 
     print "i want to see this on fail" 
+0

Хм нормально, но как я могу ссылаться на него, то в «реф» переменной? просто писать ref = Test.testmethod не работает –

+0

Как насчет 'Test.ref = 'XXX'' – matino

+0

невозможно, потому что в моем реальном использовании« ref »- это dict, содержащий списки, и мне нужно только установить один элемент в один список из одного дикта на testmethod ... –

ответ

1

Вы правы о проблемах ссылки на статический метод при создании класса. Test еще не находится в пространстве имен, и даже если вы определяете ref ниже testmethod, магия определения статического метода не завершена. Вы можете, однако, исправить класс после его создания:

class reg(cmd): 

    bla = { 
     'def': [ ... ], 
     'rem': [ ..., 
      PIPE.return_response(fail_callback=HERE_I_NEED_THE_REF), 
      ... 
     ] 
    } 

    @classmethod 
    def testmethod(cls, aco): 
     print "i want to see this on fail" 

Test.ref["rem"][??] = PIPE.return_response(fail_callback=Test.testmethod) 
0

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

class Test(object): 
    def __init__(self): 
     self.ref = self.testmethod 

    @staticmethod 
    def testmethod(anyparam="bla"): 
     print "it works" 
0

Просто определить переменную класса вне класса вслед за остальными его определения:

class reg(cmd): 
    @classmethod 
    def testmethod(cls, aco): 
     print "i want to see this on fail" 

reg.bla = { 
     'def': [ '...' ], 
     'rem': [ '...', 
      PIPE.return_response(fail_callback=reg.testmethod), 
      '...' 
     ] 
    }