Python第2版(第178页)例子关于self,instance,owner理解问题请教
书中讲解的self是描述符类自身的实例,instance是这个描述符拥有者所在的类的实例,也就是Test类的实例;owner是这个描述符的拥有者所在的类本身。有点费解,我表述下我的看法,请各位大佬指导下对不对?
self 指的是x = MyDescriptor( )的MyDescriptor描述符实例化对象;
instance指的是test = Test( )的Test类实例化对象;
owner 指的是MyDescriptor ( )类自身。 您的理解已经很准确了。下面给您提供一些更详细的解释。
在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之间的关系。 你的理解基本上是正确的,但是对于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
如果问题已经解决,请设置最佳答案 isdkz 发表于 2023-10-16 16:29
您的理解已经很准确了。下面给您提供一些更详细的解释。
在Python中,描述符是一种实现了__get__,__s ...
感谢大佬答疑,使我受益良多。{:5_95:} 陶远航 发表于 2023-10-16 16:29
你的理解基本上是正确的,但是对于owner的理解有一些误解。在Python的描述符协议中,self,instance,和own ...
感谢大佬答疑,使我更进一步,悟了。{:5_95:}
页:
[1]