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,但这也错误。
所以以后,我可以在类测试中的某个地方进行self.func,而不是反复运行条件,以找出是否应使用func1或func2
self.func()
****解决方案(我做了什么(****
在main.py中:
t = Test(func=Test.func1)
t.func(t, **kwargs)
这应该通过高阶方法t.func
您可以根据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
(未定义(,则在类范围内进行分配的代码将有效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
我会注意到,当您将函数分配给类变量时,它将被视为方法,因此您可能需要更改func2
以期望self
作为其第一个参数。对于分配给实例变量的方法,绑定行为不会发生,就像任何传递给__init__
方法的func
一样。如果您想要这些绑定行为,则需要自己实施(也许使用functools.partial
(。