微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

在从“ 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 举报,一经查实,本站将立刻删除。