gpt4 book ai didi

python - 为什么属性属于内置重写描述符类型?

转载 作者:行者123 更新时间:2023-11-30 22:34:33 25 4
gpt4 key购买 nike

Python 简介

Properties

Python supplies a built-in overriding descriptor type, which you may use to give a class’s instances properties.

A property is an instance attribute with special functionality.

引号是否暗示属性属于描述符类型?

如果是:

  • 为什么属性属于描述符类型?

  • 为什么属性属于内置且重写的描述符类型?

最佳答案

是的,引用暗示 property是描述符类型。

引用的意思是,有一个内置类 property您可以在 Python 类中使用它来创建属性。这个内置类实现了 descriptor interface ,并且是“重写”,因此是重写描述符类型。

什么是重写描述符?

如果类型具有__get__,则它实现描述符接口(interface)方法。描述符还可以有 __set____del__方法。

当对象属性实现描述符接口(interface)时,访问该属性如 <object>.<attribute>将导致 __get__要运行的描述符属性的方法。

“覆盖”描述符只是一个也实现 __set__ 的描述符。方法,这会导致 <object>.<attribute> = value调用__set__描述符属性的方法,而不是仅仅替换 '<attribute>'在对象中__dict__ .

如果你想了解描述符,this是一个值得一看的好地方。

属性类

内置属性类通常用作装饰器,并允许您实现 getter、setter 和 deleter 方法,但仍像普通属性一样使用该属性:

class Foo(object):
def __init__(self, a):
self._a = a

@property
def a(self):
print("Get a")
return self._a

@a.setter
def a(self, value):
print("Set a")
self._a = value

foo = Foo(4)
b = foo.a # b = 4, prints "Get a"
foo.a = 42 # foo._a = 42, prints "Set a"

回答您的问题:

  • 属性是描述符,因为属性类实现了描述符接口(interface)以允许这种行为,这会覆盖属性的获取、设置和删除行为。您可以看到属性类 here 的纯 python 模拟示例。
  • 属性是“重写”描述符,因为它们实现 __set__方法。 (即使您不提供 setter,属性 __set__ 方法仍然存在,并且会抛出 AttributeError 表明该属性无法设置)。

关于python - 为什么属性属于内置重写描述符类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44815137/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com