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

如何从类的staticmethod中提取所属的父类对象?

从静态方法中提取所属类对象的实现方法

可以实现这个需求,核心思路是利用静态方法的__qualname__和__module__属性反向查找所属类对象,具体步骤和代码如下:

  • 静态方法的__qualname__会包含完整的层级路径(比如A.b),拆分后可得到类的名称层级
  • 通过__module__获取方法所属的模块,再从模块开始递归解析类层级,最终得到目标类对象

实现代码

import sys
import inspect

def get_parent_object_from(func):
    # 提取限定名和所属模块
    qualname = getattr(func, '__qualname__', None)
    module_name = getattr(func, '__module__', None)
    
    if not qualname or not module_name:
        return None
    
    # 拆分限定名,分离类部分和方法名
    name_parts = qualname.split('.')
    class_path_parts = name_parts[:-1]
    if not class_path_parts:
        return None
    
    # 获取模块对象
    try:
        module = sys.modules[module_name]
    except KeyError:
        return None
    
    # 递归遍历类层级
    current_obj = module
    for part in class_path_parts:
        try:
            current_obj = getattr(current_obj, part)
        except AttributeError:
            return None
        if not inspect.isclass(current_obj):
            return None
    
    return current_obj

测试验证

class A:
    @staticmethod
    def b():
        pass

f = A.b
assert get_parent_object_from(f) is A
print("基础测试通过")

# 嵌套类场景测试
class Outer:
    class Inner:
        @staticmethod
        def foo():
            pass

f_nested = Outer.Inner.foo
assert get_parent_object_from(f_nested) is Outer.Inner
print("嵌套类测试通过")

注意事项

  • 如果静态方法的__qualname__或__module__被手动修改,此方法会失效
  • 仅适用于定义在模块级类(或嵌套类)中的静态方法,对于动态生成的类或特殊场景可能需要额外适配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 07:05:02