如何获取传入函数的方法所属的定义类名称?
获取传入函数的方法所属类名称
在Python中,针对method类型的对象,可以通过以下几种方式获取其所属的类名称:
方法1:利用__self__属性
method对象的__self__属性指向该方法绑定的实例(实例方法)或类本身(类方法):
- 如果是实例方法,
__self__是类的实例,通过type(__self__).__name__就能拿到类名称 - 如果是类方法,
__self__直接是类对象,直接取__self__.__name__即可
示例代码:
class DemoClass: def instance_method(self): pass @classmethod def class_method(cls): pass def check_method_class(method): # 判断绑定的是实例还是类 if isinstance(method.__self__, type): # 类方法的情况 return method.__self__.__name__ else: # 实例方法的情况 return type(method.__self__).__name__ # 测试实例方法 demo_obj = DemoClass() print(check_method_class(demo_obj.instance_method)) # 输出 DemoClass # 测试类方法 print(check_method_class(DemoClass.class_method)) # 输出 DemoClass
方法2:利用__qualname__属性
__qualname__是方法的限定名称,格式为类名.方法名(如果是嵌套类则为外层类.内层类.方法名),可以通过字符串分割提取类名称:
def get_class_from_qualname(method): # 分割限定名称,取方法名之前的部分作为类的名称路径 class_path = method.__qualname__.rsplit('.', 1)[0] return class_path # 测试嵌套类场景 class OuterClass: class InnerClass: def nested_method(self): pass inner_obj = OuterClass.InnerClass() print(get_class_from_qualname(inner_obj.nested_method)) # 输出 OuterClass.InnerClass
这个方法更适合处理嵌套类的场景,能完整获取类的层次结构。
内容的提问来源于stack exchange,提问作者24n8
相关产品推荐
相关产品推荐

