鱼C论坛

 找回密码
 立即注册
查看: 1039|回复: 4

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

[复制链接]
发表于 2023-10-16 16:29:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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

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

owner 指的是MyDescriptor ( )类自身。
最佳答案
2023-10-16 16:29:48
你的理解基本上是正确的,但是对于owner的理解有一些误解。在Python的描述符协议中,selfinstance,和owner通常在描述符的方法中使用,如__get____set__,和__delete__。这些方法的参数有特定的含义:

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

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

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

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

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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之间的关系。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2023-10-16 16:29:48 | 显示全部楼层    本楼为最佳答案   
你的理解基本上是正确的,但是对于owner的理解有一些误解。在Python的描述符协议中,selfinstance,和owner通常在描述符的方法中使用,如__get____set__,和__delete__。这些方法的参数有特定的含义:

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

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

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

所以,你的理解中,selfinstance是正确的,但是owner应该是拥有描述符的类本身,也就是Test类,而不是MyDescriptor类。
请注意,本回答来自GPT-4
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-10-17 09:08:42 | 显示全部楼层
isdkz 发表于 2023-10-16 16:29
您的理解已经很准确了。下面给您提供一些更详细的解释。



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

感谢大佬答疑,使我受益良多。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

感谢大佬答疑,使我更进一步,悟了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-20 05:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表