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)
说明
- 函数核心逻辑是找到传入类列表里的最终子类(比如
C),因为它的MRO就是实例的属性查找路径。 - 实例的属性/方法查找规则完全遵循所属类的MRO,所以不需要创建实例就能得到正确的路径。
内容的提问来源于stack exchange,提问作者jamie
相关产品推荐
相关产品推荐

