方法的 __self__ 属性如何成为类而不是实例?

wow*_*yoo 4 python methods attributes python-3.x

实例方法的文档让我很困惑,它将方法分为两种类型:一种是通过类的实例检索的,另一种是通过从类或实例检索方法来创建的。

根据描述,

当通过从类或实例中检索类方法对象来创建实例方法对象时,其__self__属性是类本身,其__func__属性是类方法底层的函数对象。

更复杂的方法的属性 __self__是类。有人可以举个例子来说明这种情况吗?

zEr*_*Ero 5

当您这样读时,该声明可能听起来含糊不清。我会尝试打破它。

当通过从类或实例检索类方法对象来创建实例方法对象时...

class TestClass(object):
    @classmethod
    def test_method(cls):
        return 1
Run Code Online (Sandbox Code Playgroud)

它的__self__属性是类本身,它的__func__属性是类方法底层的函数对象。

所以如果我们有一个obj = TestClass()那么

obj.test_method.__self__ == TestClass.test_method.__self__
Run Code Online (Sandbox Code Playgroud)

obj.test_method.__func__ == TestClass.test_method.__func__
Run Code Online (Sandbox Code Playgroud)

该声明专门针对从类的类方法创建的实例方法。

我希望它更清楚。我在这里创建了一个片段供您使用。