擅长:python、mysql、java
<p>基本的答案是“你不能这么可靠”。见<a href="https://stackoverflow.com/questions/191010/how-to-get-a-complete-list-of-objects-methods-and-attributes">this question</a>。</p>
<p>你可以用<code>[attr for attr in dir(obj) if attr[:2] + attr[-2:] != '____' and not callable(getattr(obj,attr))]</code>得到一个近似值。</p>
<p>但是,你不应该依赖这个,<a href="http://docs.python.org/2/library/functions.html#dir" rel="nofollow noreferrer">because</a>:</p>
<blockquote>
<p>Because <code>dir()</code> is supplied primarily as a convenience for use at an interactive prompt, it tries to supply an interesting set of names more than it tries to supply a rigorously or consistently defined set of names, and its detailed behavior may change across releases.</p>
</blockquote>
<p>换句话说,没有一种规范的方法可以得到“对象的所有属性”(或“对象的所有方法”)的列表。</p>
<p>如果您正在进行某种动态编程,需要迭代对象的未知字段,那么唯一可靠的方法是实现自己跟踪这些字段的方法。例如,您可以使用属性命名约定、特殊的“fields”对象,或者,最简单的说,使用字典。</p>