【发布时间】:2018-09-19 13:18:50
【问题描述】:
我正在尝试创建一个偏函数,但具有存储为类属性并相应更改的动态参数。类似于以下代码:
from functools import partial
def foo(*args, msg):
print(msg)
class Bar:
def __init__(self, msg):
self.msg = msg
self.functions = dict()
self.functions['foo'] = partial(foo, msg=self.msg)
def foo_method(self, *args):
return self.functions['foo'](*args)
b =Bar('1')
b.foo_method()
b.msg = '2'
b.foo_method()
当然,两个语句都会打印“1”,因为部分对象修复了参数。我发现的唯一选择是将属性更改为属性并使用 setter 手动更改部分属性:
class Bar:
def __init__(self, msg):
self._msg = None
self.functions = dict()
self.functions['foo'] = partial(foo)
self.msg = msg
def foo_method(self, *args):
return self.functions['foo'](*args)
@property
def msg(self):
return self._msg
@msg.setter
def msg(self, msg):
self._msg = msg
self.functions['foo'].keywords['msg'] = msg
我想知道是否有更“pythonic”/有效的方法来做到这一点,因为除了这个解决方法之外我真的不需要使用属性。
【问题讨论】:
标签: python python-3.x