You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优雅修改Python类中函数传入的属性?以on_message为例

更Pythonic的方式修改类实例的on_message属性

场景说明

你使用外部库的my_class创建了WebSocket客户端实例,但后续才定义消息处理函数do_stuff_with_message,不想通过重新实例化的方式替换on_message属性,希望找到更优雅的实现方式。

可行方案

1. 直接修改实例属性(最便捷)

如果my_class的__init__方法将on_message参数赋值给了实例属性(这类WebSocket客户端库通常会这么做),直接给实例的on_message属性赋值即可,无需重新创建对象:

# 已创建实例
ws_client = my_class(stream_url="wss://stream.actual:6969/ws")

# 后续定义消息处理函数
def do_stuff_with_message():
    # 处理消息的逻辑

# 直接替换属性
ws_client.on_message = do_stuff_with_message

ws_client.my_function(key="Dante")

2. 前置声明消息处理函数(更规范)

如果允许提前定义do_stuff_with_message,可以在实例化时直接传入该函数,从根源避免后续修改:

# 提前定义消息处理函数
def do_stuff_with_message():
    # 处理消息的逻辑

# 实例化时直接传入参数
ws_client = my_class(
    stream_url="wss://stream.actual:6969/ws",
    on_message=do_stuff_with_message
)

ws_client.my_function(key="Dante")

3. 使用库提供的官方API(优先选择)

部分外部库会专门提供设置回调的方法(比如set_on_message),如果my_class有这类方法,优先使用官方推荐的方式,保证兼容性:

ws_client.set_on_message(do_stuff_with_message)

为什么不推荐重新实例化?

重新创建my_class实例会生成全新的对象,之前的WebSocket连接状态(如果已建立)会丢失,而且代码冗余,不符合Python简洁性的设计原则。

内容的提问来源于stack exchange,提问作者led_farmer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 16:15:10