Python &引用;类用于保存描述符的属性名称优先于存储在实例上的属性";-这是什么意思?
在阅读“Python Essential Reference,第四版,David M Beazley”中的描述符时,提供了一个特定的示例,以阐明如何使用描述符对实例属性执行获取和更新操作。下面是提供的示例-Python &引用;类用于保存描述符的属性名称优先于存储在实例上的属性";-这是什么意思?,python,instance,descriptor,Python,Instance,Descriptor,在阅读“Python Essential Reference,第四版,David M Beazley”中的描述符时,提供了一个特定的示例,以阐明如何使用描述符对实例属性执行获取和更新操作。下面是提供的示例- class TypedProperty(object): def __init__(self,name,type,default=None): self.name = "_" + name self.type = type
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,instance,value):
if not isinstance(value,self.type):
raise TypeError("Must be a %s" % self.type)
setattr(instance,self.name,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"
在解释上述示例时,会做出以下声明:“类用于保存描述符的属性名称优先于实例上存储的属性。在上一个示例中,这就是为什么描述符对象采用名称参数,以及为什么名称会因
插入前导下划线。以便描述符在
例如,它必须选择一个与描述符使用的名称不同的名称
本身。”。我不清楚这是什么意思
为了理解如果在TypedPropertyinit()中没有添加前导下划线会发生什么情况,我将行更改为
self.name = name
这会导致每当我试图查看f.name时程序崩溃。那么,有人能解释一下,在查看或设置f.name时,搜索名称的作用域或名称空间的顺序吗