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

Python如何将类实例方法作为同类另一实例方法的默认参数

问题原因

Python的函数默认参数会在函数定义阶段完成求值,不会延迟到函数调用阶段。类定义时还不存在实例对象,self尚未初始化,因此无法直接将self.say_hi设为默认参数;直接写say_hi拿到的是未绑定实例的类函数,调用时不会自动注入self参数,执行时会报错。

正确实现

使用None作为默认参数占位符,在方法执行阶段再绑定实例方法即可:

from typing import Callable, Optional

class Person:
    def __init__(self, name):
        self.name = name

    def say_hi(self):
        print("Hello, my name is", self.name)

    def greet(self, func: Optional[Callable] = None):
        # 方法执行时self已完成初始化,此时绑定实例方法
        if func is None:
            func = self.say_hi
        func()

p = Person("Guido")
# 不传参时使用默认的say_hi方法
p.greet()
# 也支持传入自定义可调用对象
def custom_greet():
    print("这是自定义的打招呼逻辑")
p.greet(custom_greet)

运行输出:

Hello, my name is Guido
这是自定义的打招呼逻辑

内容的提问来源于stack exchange,提问作者Joost Döbken

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 04:18:04