如何在Python的lambda表达式中为property属性赋值
问题原因说明
你遇到的报错是两个Python语法特性的限制共同导致的:
- 海象运算符
:=的左操作数仅支持普通变量、下标引用等类型,不支持给property属性赋值 - lambda表达式只能容纳单个表达式,常规的属性赋值语句
y.enabled = x.enabled属于语句类型,不能直接写到lambda的函数体中。
优雅实现方案
最推荐的写法是直接定义独立的同步函数,完全不需要使用setattr,可读性和扩展性都是最好的:
def sync_enabled(source: Foo): b.enabled = source.enabled a.register_event_listener(sync_enabled)
如果需要同步多组实例,还可以封装成生成同步函数的工厂方法,适配更多场景:
def create_sync_target(target: Foo): def sync_enabled(source: Foo): target.enabled = source.enabled return sync_enabled # 用法 a.register_event_listener(create_sync_target(b)) # 也可以用来同步其他实例 a.register_event_listener(create_sync_target(c))
内容的提问来源于stack exchange,提问作者QuaternionsRock
相关产品推荐
相关产品推荐

