“类用于保存描述符的属性名称优先于实例上存储的属性”-这是什么意思?

问题描述

在从“ Python基本参考,第四版,David M Beazley”中阅读描述符时,提供了一个特定示例来阐明如何使用描述符对实例属性进行获取和更新操作。以下是提供的示例-

class TypedProperty(object):
    def __init__(self,name,type,default=None):
        self.name = "_" + name
        self.type = type
        self.default = default if default else type()
    def __get__(self,instance,cls):
        return getattr(instance,self.name,self.default)
    def __set__(self,value):
        if not isinstance(value,self.type):
            raise TypeError("Must be a %s" % self.type)
        setattr(instance,value)
    def __delete__(self,instance):
        raise AttributeError("Can't delete attribute")
        
class Foo(object):
    name = TypedProperty("name",str)
    num = TypedProperty("num",int,42)
    
f = Foo()
a = f.name
f.name = "Guido"

在解释上面的示例时,做出以下声明-“类用于保存描述符的属性名称优先于存储在实例上的属性。在前面的示例中,这就是为什么描述符对象使用name参数和为什么名字被稍微改变 插入下划线。为了使描述符将值存储在 例如,它必须选择一个与描述符所使用的名称不同的名称 本身。”我不清楚它的含义。

要了解如果在TypedProperty init ()中未添加前导下划线,会发生什么情况,我将该行更改为

self.name = name

每当我尝试查看f.name时,这都会导致我的程序崩溃。所以有人可以解释一下在查看或设置f.name时在其中搜索名称的作用域或名称间的顺序。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)