【问题标题】:How to let a class variable in python refer to a static method of the same class?如何让python中的类变量引用同一个类的静态方法?
【发布时间】:2015-05-30 16:45:32
【问题描述】:

我有一个类,它有一个类变量和一个静态方法,我需要让类变量包含对静态方法的回调。

类看起来像:

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

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

我该怎么做?这甚至可能吗?

我正在使用 python 2

编辑: 真实的例子是这样的:

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"

【问题讨论】:

  • 嗯好的,但是我如何在“ref”变量中引用它呢?简单地写 ref = Test.testmethod 不起作用
  • Test.ref = 'XXX'怎么样
  • 不可能,因为在我的实际用例中,“ref”是一个包含列表的字典,我只需要将一个字典的一个列表中的一个元素设置为 testmethod...
  • 那我不明白。您能否提供输入和预期输出?
  • 我更新了问题

标签: python class variables methods static


【解决方案1】:

您对在类创建期间引用静态方法的问题是正确的。 Test 还没有在命名空间中,即使你在testmethod 下面定义了ref,静态方法定义魔法也不完整。但是,您可以在创建类后对其进行修补:

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)

【讨论】:

    【解决方案2】:

    如果我正确理解您的问题,您可以这样做。

    class Test(object):
        def __init__(self):
            self.ref = self.testmethod
    
        @staticmethod
        def testmethod(anyparam="bla"):
            print "it works"
    

    【讨论】:

      【解决方案3】:

      只需在类的其余定义之后定义类变量即可:

      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),
                  '...'
              ]
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-08
        • 2011-01-24
        • 1970-01-01
        • 2011-01-12
        • 2018-07-04
        • 1970-01-01
        • 2015-10-04
        相关资源
        最近更新 更多