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

Python:能否在函数中访问调用前未创建的对象以获取属性查找路径?

解决类属性查找路径的问题

首先明确:你不可能访问一个还未创建的对象——在调用rearrange([A,B,C])时,c还没被实例化,内存里根本不存在这个对象,自然没法直接获取它的信息。

但你的需求完全不需要依赖对象,因为类的方法解析顺序(MRO)就决定了它的实例的属性查找路径。比如C类的MRO就是C → B → A → object,这和实例c调用方法时的查找顺序完全一致。

修改后的rearrange函数实现

class A:
    def __init__(self):
        pass
    def f(self, a, b):
        pass

class B(A):
    def g(self , a):
        pass

class C(B):
    def L(self , a):
        pass

def rearrange(list_of_class):
    # 从传入的类列表中找到继承链最末端的子类(没有被其他类继承的类)
    final_class = None
    for cls in list_of_class:
        # 检查当前类是否是列表中其他类的基类
        is_base_class = any(cls in other.__bases__ for other in list_of_class if other != cls)
        if not is_base_class:
            final_class = cls
            break
    
    if final_class:
        # 获取MRO并排除object类,转换成指定格式
        mro_path = [cls.__name__ for cls in final_class.mro() if cls is not object]
        return "-> ".join(mro_path)
    return ""

# 调用示例,输出结果:C-> B-> A
print(rearrange([A,B,C]))

c = C()
c.f(10,20)

说明

  1. 函数核心逻辑是找到传入类列表里的最终子类(比如C),因为它的MRO就是实例的属性查找路径。
  2. 实例的属性/方法查找规则完全遵循所属类的MRO,所以不需要创建实例就能得到正确的路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 20:57:17