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

如何获取传入Python类方法的参数字典?

类方法中获取参数字典的方法

对于普通函数,我们可以通过locals()直接获取传入的参数字典:

def my_func(a, b):
    print(locals())

调用my_func(a=1, b=2)时,会输出{'a': 1, 'b': 2}。

如果是类中的方法,需要根据方法类型做不同处理:

1. 实例方法

实例方法第一个参数默认是self,需排除这个参数后获取目标字典:

class MyClass:
    def my_function(self, a, b):
        # 复制本地变量字典并移除self
        params = locals().copy()
        del params['self']
        print(params)

obj = MyClass()
obj.my_function(a=1, b=2)  # 输出 {'a': 1, 'b': 2}

2. 类方法(@classmethod修饰)

类方法第一个参数是cls,同样需要排除该参数:

class MyClass:
    @classmethod
    def my_function(cls, a, b):
        params = locals().copy()
        del params['cls']
        print(params)

MyClass.my_function(a=1, b=2)  # 输出 {'a': 1, 'b': 2}

3. 静态方法(@staticmethod修饰)

静态方法没有默认的self或cls参数,直接使用locals()即可:

class MyClass:
    @staticmethod
    def my_function(a, b):
        print(locals())

MyClass.my_function(a=1, b=2)  # 输出 {'a': 1, 'b': 2}

也可以借助inspect模块实现更通用的逻辑,自动识别并过滤方法的默认首个参数:

import inspect

class MyClass:
    def my_instance_method(self, a, b):
        sig = inspect.signature(self.my_instance_method)
        params = {k: v for k, v in locals().items() if k in sig.parameters and k != 'self'}
        print(params)
    
    @classmethod
    def my_class_method(cls, a, b):
        sig = inspect.signature(cls.my_class_method)
        params = {k: v for k, v in locals().items() if k in sig.parameters and k != 'cls'}
        print(params)

obj = MyClass()
obj.my_instance_method(a=1, b=2)  # 输出 {'a': 1, 'b': 2}
MyClass.my_class_method(a=1, b=2)  # 输出 {'a': 1, 'b': 2}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 16:17:08