代码之家  ›  专栏  ›  技术社区  ›  max

静态方法作为类方法的默认参数

  •  4
  • max  · 技术社区  · 14 年前

    Using class/static methods as default parameter values within methods of the same class .

    我想知道这两个答案之间是否真的有区别,如果有,它们各自的优缺点是什么。

    问题:如何使用类方法作为同一类中方法的默认参数。

    答案1:用函数代替类方法

    class X:
        def default_func(x):
            return True
    
        def test(self, func = default_func):
            return func(self)
    

    答案2:使用类方法,但将其转换为函数

    def unstaticmethod(static):
        return static.__get__(None, object)
    
    class X:
        @staticmethod
        def default_func(x):
            return True
    
        def test(self, func = unstaticmethod(default_func)):
            return func(self)
    

    这最初是用Python2编写的,但我的总结是(希望是)Python3。

    1 回复  |  直到 7 年前
        1
  •  3
  •   Jason R. Coombs    14 年前

    答案真的取决于你的其他意图 X.default_func 十、 默认函数

    # in other code...
    some_object = "Bring out your dead"
    X.default_func(some_object)
    

    另一方面,如果您不希望调用default_func,除非是在X的一个实例中(当然也用作 test self ).

    class X:
        def default_func(self):
            return True
    
        def test(self, func = default_func):
            return func(self)
    

    作为补充说明,我想指出的是,您可以用不同的方式来编写答案2,以避免使用非静态方法:

    class X:
        def default_func(x):
            return True
    
        def test(self, func = default_func):
            return func(self)
    
        default_func = staticmethod(default_func)
    

    有效的原因是直到下面的整个块之后才创建类X(并且默认的函数不会成为X的方法) class X: test(func) ).