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

如何获取传入参数的名称?无法修改预定义Message类

解决方案

因为你无法修改Message类,只能通过反向查找类属性与值的映射关系来实现需求——毕竟传入sendData的只是一个数值,本身不携带任何关于它来自哪个属性的元数据。

方法一:提前构建反向映射字典(推荐,效率更高)

先一次性生成Message类属性值到属性名的映射,之后在函数里直接查询:

class Message:
    I = 1
    LIKE = 2
    COODING = 3

# 构建值到属性名的反向映射,过滤掉类的内置属性
message_value_map = {v: k for k, v in vars(Message).items() if not k.startswith('__')}

def sendData(arg):
    # 获取对应的属性名
    attr_name = message_value_map.get(arg)
    if attr_name:
        print(f"Message.{attr_name}")  # 输出 Message.LIKE
        print(arg)                     # 输出 2
    else:
        print("传入的值不属于Message类的属性")

sendData(Message.LIKE)

方法二:函数内动态查找(无需提前构建,适合属性少的场景)

如果Message的属性不多,也可以在函数内部遍历类属性,找到对应值的属性名:

class Message:
    I = 1
    LIKE = 2
    COODING = 3

def sendData(arg):
    # 遍历Message的所有非内置属性
    for name, value in vars(Message).items():
        if not name.startswith('__') and value == arg:
            print(f"Message.{name}")
            print(value)
            break
    else:
        # 循环正常结束(没找到匹配值)
        print("传入的值不属于Message类的属性")

sendData(Message.LIKE)

注意事项

  • 如果Message类中存在多个属性值相同的情况,上述方法只会返回最后一个被遍历到的属性名,所以要确保类里的属性值都是唯一的。
  • vars(Message)会返回类的所有属性字典,我们通过not k.startswith('__')过滤掉__module__、__doc__这类内置属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 02:35:16