插件窝 干货文章 Python类方法究竟属于哪个类?如何查询类方法的所属类?

Python类方法究竟属于哪个类?如何查询类方法的所属类?

class method 方法 MyClass 325    来源:    2025-03-15

在Python中,类方法(class method)是一种特殊的方法,它与类本身相关联,而不是与类的实例相关联。类方法使用@classmethod装饰器来定义,并且第一个参数通常是cls,表示类本身。

类方法的所属类

类方法属于定义它的类。当你调用一个类方法时,Python会自动将类本身作为第一个参数传递给该方法。

如何查询类方法的所属类

你可以通过以下几种方式来查询类方法的所属类:

  1. 使用__qualname__属性__qualname__属性会返回方法的限定名称,其中包括类名和方法名。

    class MyClass:
       @classmethod
       def my_class_method(cls):
           pass
    
    print(MyClass.my_class_method.__qualname__)
    

    输出:

    MyClass.my_class_method
    
  2. 使用__self__属性: 对于类方法,__self__属性会返回类本身。

    class MyClass:
       @classmethod
       def my_class_method(cls):
           pass
    
    print(MyClass.my_class_method.__self__)
    

    输出:

    <class '__main__.MyClass'>
    
  3. 使用inspect模块inspect模块提供了更强大的工具来检查对象的属性。你可以使用inspect.getmro()来获取方法的所属类。

    import inspect
    
    class MyClass:
       @classmethod
       def my_class_method(cls):
           pass
    
    print(inspect.getmro(MyClass.my_class_method.__self__))
    

    输出:

    (<class '__main__.MyClass'>, <class 'object'>)
    

示例代码

以下是一个完整的示例,展示了如何查询类方法的所属类:

class MyClass:
    @classmethod
    def my_class_method(cls):
        pass

# 方法1: 使用 __qualname__
print("Method 1:", MyClass.my_class_method.__qualname__)

# 方法2: 使用 __self__
print("Method 2:", MyClass.my_class_method.__self__)

# 方法3: 使用 inspect 模块
import inspect
print("Method 3:", inspect.getmro(MyClass.my_class_method.__self__))

输出:

Method 1: MyClass.my_class_method
Method 2: <class '__main__.MyClass'>
Method 3: (<class '__main__.MyClass'>, <class 'object'>)

通过这些方法,你可以轻松地确定类方法的所属类。