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

Python中如何将绑定self的活跃方法作为参数传入类内其他方法调用

问题核心原因

你这段代码无法运行的核心原因有两点:

  1. 直接执行example.super_method(method1)时,全局作用域不存在method1变量,method1是Object类的内置实例方法,无法直接在全局空间访问。
  2. super_method内部的self.method()写法错误:这里的method是传入的参数变量,不是self的固定属性,不能用点语法直接访问self.method。
常用解决方案

方案1:传入方法名字符串,用getattr动态调用

是最贴合你原始代码逻辑的实现方式,也方便做参数合法性校验:

class Object:
    def __init__(self, number1, number2):
        self.value1 = number1
        self.value2 = number2
    
    def method1(self):
        return self.value1
    
    def method2(self):
        return self.value2
    
    def super_method(self, method_name: str):
        # 从当前实例动态获取对应方法对象
        target_method = getattr(self, method_name)
        return 2 * target_method()


example = Object(4, 6)
# 传入方法名的字符串形式即可
print(example.super_method("method1")) # 输出 8
print(example.super_method("method2")) # 输出 12

方案2:直接传入方法对象

如果不想传字符串,也可以根据使用场景选择传绑定/未绑定的方法对象:

传类的未绑定方法

class Object:
    def __init__(self, number1, number2):
        self.value1 = number1
        self.value2 = number2
    
    def method1(self):
        return self.value1
    
    def method2(self):
        return self.value2
    
    def super_method(self, unbound_method):
        # 未绑定方法需要手动传入self作为第一个参数
        return 2 * unbound_method(self)


example = Object(4, 6)
# 传入类的方法属性
print(example.super_method(Object.method1)) # 输出 8
print(example.super_method(Object.method2)) # 输出 12

传实例的绑定方法

如果调用时已经确定了方法归属的实例,也可以直接传绑定好的方法:

class Object:
    def __init__(self, number1, number2):
        self.value1 = number1
        self.value2 = number2
    
    def method1(self):
        return self.value1
    
    def method2(self):
        return self.value2
    
    def super_method(self, bound_method):
        # 绑定方法已经关联了对应实例,直接调用即可
        return 2 * bound_method()


example = Object(4, 6)
# 传入当前实例的绑定方法
print(example.super_method(example.method1)) # 输出 8
print(example.super_method(example.method2)) # 输出 12

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 20:36:08