python3 默认 class 方法属性 class

python3 default class attribute to method in same class

class Test:
    func = self.func2 # default: func is func2 by default
    # tried Test.func2 as well and Pycharm shows error

    def __init__(self, func=None):
        if func is not None:
            self.func = func

    def func1(self):
        pass

    def func2(self):
        pass

任何人都可以建议如何实现上述目标吗?

我也尝试在构造函数中将 func 参数设置为默认为 func2,但这也会出错。

所以稍后,在 class 测试的某个地方,我可以只调用 self.func 而不是重复 运行 条件来找出是否应该使用 func1 或 func2

self.func()

**** 解决方案(我所做的)****

在main.py:

t = Test(func=Test.func1)
t.func(t, **kwargs)

这应该通过调用高阶方法 t.func[= 成功调用 t.func1(或 t.func2,如果指定)并访问 t instance_attributes 16=]

您可以根据 func 参数的值在 __init__ 方法中设置默认值:

也许是这样的:

class Test:

    def __init__(self, func=None):
        if func is None:
            self.func = self.func2
        else:
            self.func = func

    def func1():
        print('func1')

    def func2(self):
        print('func2')

Test().func()
Test(Test.func1).func()

输出:

func2
func1

如果您不使用 self(未定义)并且将其移动到 class定义,这样运行时func2就会存在于命名空间中。

class Test:
    def __init__(self, func=None):
        if func is not None:
            self.func = func

    def func1():
        pass

    def func2():
        pass

    func = func2 # this will work down here

我会注意到,当您将函数分配给 class 变量时,它将被视为一种方法,因此您可能需要更改 func2 以期望 self 作为它的第一个参数。对于作为实例变量分配的方法,绑定行为不会发生,就像任何 func 传递给 __init__ 方法一样。如果你想为那些绑定行为,你需要自己实现它(也许 functools.partial)。