bio911 发表于 2023-10-16 16:29:09

Python第2版(第178页)例子关于self,instance,owner理解问题请教

书中讲解的self是描述符类自身的实例,instance是这个描述符拥有者所在的类的实例,也就是Test类的实例;owner是这个描述符的拥有者所在的类本身。
有点费解,我表述下我的看法,请各位大佬指导下对不对?

self   指的是x = MyDescriptor( )的MyDescriptor描述符实例化对象;

instance指的是test = Test( )的Test类实例化对象;

owner 指的是MyDescriptor ( )类自身。

isdkz 发表于 2023-10-16 16:29:42

您的理解已经很准确了。下面给您提供一些更详细的解释。



在Python中,描述符是一种实现了__get__,__set__和/或__delete__方法的类。当一个描述符被用作一个类的属性时,它可以控制这个属性的访问和修改。



在书中的例子中,MyDescriptor是一个描述符类。当我们实例化一个MyDescriptor对象时,我们创建了一个描述符实例,这个实例被称为self。



当我们将这个描述符对象作为Test类的属性时,我们称这个描述符对象为Test类的描述符属性。当我们创建一个Test类的实例时,我们称这个实例为instance。



当我们访问或修改Test类的描述符属性时,Python会调用描述符的__get__和__set__方法。在这些方法中,我们可以访问self和instance。self是描述符对象自身的引用,而instance是拥有这个描述符属性的类的实例。



另外,owner是描述符类自身的引用。在描述符的__get__和__set__方法中,我们可以通过self.__class__来访问描述符类自身的引用。



希望这些解释可以帮助您更好地理解描述符和self,instance,owner之间的关系。

陶远航 发表于 2023-10-16 16:29:48

你的理解基本上是正确的,但是对于owner的理解有一些误解。在Python的描述符协议中,self,instance,和owner通常在描述符的方法中使用,如__get__,__set__,和__delete__。这些方法的参数有特定的含义:

· self:这是描述符实例本身。在你的例子中,self就是x = MyDescriptor()这个MyDescriptor的实例。

· instance:这是拥有描述符的类的实例。在你的例子中,instance就是test = Test()这个Test类的实例。

· owner:这是拥有描述符的类本身。这个参数通常在__get__方法中使用。在你的例子中,如果MyDescriptor是Test类的一个属性,那么owner就是Test类本身,而不是MyDescriptor类。

所以,你的理解中,self和instance是正确的,但是owner应该是拥有描述符的类本身,也就是Test类,而不是MyDescriptor类。
请注意,本回答来自GPT-4
如果问题已经解决,请设置最佳答案

bio911 发表于 2023-10-17 09:08:42

isdkz 发表于 2023-10-16 16:29
您的理解已经很准确了。下面给您提供一些更详细的解释。



在Python中,描述符是一种实现了__get__,__s ...

感谢大佬答疑,使我受益良多。{:5_95:}

bio911 发表于 2023-10-17 09:09:14

陶远航 发表于 2023-10-16 16:29
你的理解基本上是正确的,但是对于owner的理解有一些误解。在Python的描述符协议中,self,instance,和own ...

感谢大佬答疑,使我更进一步,悟了。{:5_95:}
页: [1]
查看完整版本: Python第2版(第178页)例子关于self,instance,owner理解问题请教