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
)。
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
)。