gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 11:10:51 25 4
gpt4 key购买 nike

我的问题是关于另一个问题的两个答案:Using class/static methods as default parameter values within methods of the same class .

我试图了解这两个答案之间是否真的存在差异,如果存在差异,各自的优缺点是什么。

问题:如何将类方法作为默认参数传递给同一个类中的方法。

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

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)

这最初是用 Python 2 编写的,但我的总结是(希望)Python 3。

最佳答案

答案实际上取决于您对 X.default_func 的其他意图。如果您打算在 X 的实例之外调用 X.default_func,那么您希望它是一个静态方法(答案 2)。

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

另一方面,如果您认为 default_func 永远不会被调用,除非在 X 的实例中(当然用作 test 的默认值),我会重新 -将答案 1 写成正确的方法(并使用 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)

之所以起作用,是因为在处理 class X: 下的整个 block (包括默认参数)之前,不会创建类 X(并且 default_func 不会成为 X 的方法)对于 test(func))。

关于python - 静态方法作为类方法的默认参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3971490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com