擅长:python、mysql、java
<p><code>B.v = 3</code>只是用一个整数覆盖描述符(应该如此),这是正确的。在</p>
<p>为了使<code>B.v = 3</code>调用描述符,描述符应该在元类上定义,即在<code>type(B)</code>上定义。在</p>
<pre><code>>>> class BMeta(type):
... v = VocalDescriptor()
...
>>> class B(metaclass=BMeta):
... pass
...
>>> B.v = 3
__set__
</code></pre>
<p>要调用<code>B</code>上的描述符,可以使用一个实例:<code>B().v = 3</code>将执行此操作。在</p>
<p><code>B.v</code>调用getter的原因是允许返回描述符实例本身。通常您会这样做,以允许通过类对象访问描述符:</p>
^{pr2}$
<p>现在,<code>B.v</code>将返回一些实例,如<code><mymodule.VocalDescriptor object at 0xdeadbeef></code>,您可以与之交互。它实际上是描述符对象,定义为类属性,其状态<code>B.v.__dict__</code>在{<cd4>}的所有实例之间共享。在</p>
<p>当然,这取决于用户的代码来定义他们想要<code>B.v</code>做什么,返回{<cd12>}只是一种常见模式。在</p>