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

时间:2016-12-21 08:46:44

标签: python python-3.x methods attributes

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

根据描述,

  

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

更复杂方法的__self__属性是一个类。 有人能告诉我一个例子来说明这种情况吗?

1 个答案:

答案 0 :(得分:2)

当你这样阅读时,声明可能听起来含糊不清。我会尝试将其分解。

  

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

class TestClass(object):
    @classmethod
    def test_method(cls):
        return 1
  

__self__属性是类本身及其__func__属性   是类方法的基础功能对象。

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

obj.test_method.__self__ == TestClass.test_method.__self__

obj.test_method.__func__ == TestClass.test_method.__func__

此语句特别是关于从类的类方法创建的实例方法。

我希望它更清楚。我已经为您创建了一个代码段here