如何从未绑定的类方法中获取其所属类的引用?
是否可以在类实例化之前,访问将函数定义为方法的所属类?
在Python中,直接通过类获取方法(比如m1 = MyClass.method)得到的是未绑定的普通函数(Python 3已移除专门的未绑定方法对象)。它不像绑定方法(如m2 = instance.method)那样有__self__属性关联实例,所以没法直接用类似m2.__self__.__class__的方式拿到所属类。
你提到的__qualname__确实是可行方案,它会返回包含类名和方法名的字符串,格式为'类名.方法名',我们可以通过解析这个字符串获取类的引用:
示例代码
class MyClass: def method(self): print("Calling me") m1 = MyClass.method # 从m1获取MyClass的引用 qualname_parts = m1.__qualname__.split('.') # 顶层类取第一个部分,嵌套类需对应调整索引 class_name = qualname_parts[0] # 从全局命名空间中获取类对象 my_class_ref = globals()[class_name] print(my_class_ref) # 输出: <class '__main__.MyClass'>
注意事项
- 如果类是嵌套在其他类或模块中的,要根据
__qualname__的层级调整拆分逻辑,比如嵌套类的__qualname__会是'OuterClass.InnerClass.method'。 - 这种方式依赖
__qualname__的格式稳定性,Python官方保证它能准确反映方法归属结构,但如果手动修改过__qualname__会失效。
内容的提问来源于stack exchange,提问作者GopherM
相关产品推荐
相关产品推荐

