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

能否创建包含类方法的字典,用于调用不同类实例的方法?

问题:能否通过字典存储类方法,调用不同实例的对应方法?

假设有如下Cat类:

class Cat:
    def __init__ (self):
        pass
    
    def sayMeow (self):
        print('Meow!')

    def sayMrrr (self):
        print('Mrrrr!')

    def beHungry(self):
        print('Am am am am!')

以及该类的多个实例:

#...
maria = Cat()
adelina = Cat()
#...

我们希望创建一个包含该类方法的字典cat_methods,以便通过字典元素调用maria和adelina的对应方法,示例字典如下:

cat_methods = {
    'meow': 0, # TODO method sayMeow
    'mrrr': 0, # TODO method sayMrrr
    'am': 0 # TODO method beHungry
}

请问这是否可行?


回答

当然可行,给你两种实用的实现方式:

方式一:直接存类方法对象

把Cat类的方法直接放进字典里,调用的时候把实例作为参数传进去就行——因为类的方法没绑定具体实例时,需要手动传入实例当第一个参数:

cat_methods = {
    'meow': Cat.sayMeow,
    'mrrr': Cat.sayMrrr,
    'am': Cat.beHungry
}

调用示例:

cat_methods['meow'](maria)  # 打印 Meow!
cat_methods['mrrr'](adelina)  # 打印 Mrrrr!

方式二:存方法名称,用getattr调用

要是不想直接存方法对象,也可以在字典里存方法的字符串名称,调用时通过getattr从实例里拿到对应方法再执行:

cat_methods = {
    'meow': 'sayMeow',
    'mrrr': 'sayMrrr',
    'am': 'beHungry'
}

调用示例:

getattr(maria, cat_methods['meow'])()  # 打印 Meow!
getattr(adelina, cat_methods['am'])()  # 打印 Am am am am!

两种方式都能满足需求,第一种更直接高效,第二种灵活性更强,比如后续可以轻松修改字典里的方法名映射。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 21:54:16