擅长:python、mysql、java
<p>访问<code>__dbattr__</code>有点棘手:</p>
<p>首先,需要获取property对象:</p>
<pre><code>p = u.__class__.__dict__['Name']
</code></pre>
<p>然后取回名为<code>validate</code>的setter函数对象,它在<code>DataMember.__call__</code>中定义:</p>
^{pr2}$
<p>然后从<code>setter_func</code>的闭包取回底层的<code>User.Name(self , value)</code>函数对象:</p>
<pre><code>ori_func = setter_func.__closure__[0].cell_contents
</code></pre>
<p>现在您可以访问<code>__dbattr__</code>:</p>
<pre><code>>>> ori_func.__dbattr__
{'required': False, 'type': 'string', 'length': 100}
</code></pre>
<p>但这有用吗?我不知道。也许您可以在<code>DataMember.__call__</code>返回的<code>validate</code>函数对象上设置<code>__dbattr__</code>,正如其他答案所指出的那样。在</p>