<p>在<code>MyBase.p</code>中执行<code>callable(getattr(self, attr))</code>时,已经获得一次值。您可以使用相同的方法来获取输出的值:</p>
<pre><code>class MyBase(object):
def p(self):
print [(attr, getattr(self, attr)) for attr in dir(self)
if not callable(getattr(self, attr)) and not attr.startswith('__')]
</code></pre>
<p>或者可以使用<a href="https://docs.python.org/2/library/functions.html#vars" rel="nofollow">^{<cd3>}</a>而不是<a href="https://docs.python.org/2/library/functions.html#dir" rel="nofollow">^{<cd4>}</a>:</p>
<pre><code>class MyBase(object):
def p(self):
print [(attr, value) for attr, value in vars(self).items()
if not callable(value) and not attr.startswith('__')]
</code></pre>
<p>两者都会产生如下结果:</p>
<pre><code>[('age', 29), ('name', 'ehsan'), ('family', 'shirzadi')]
</code></pre>
<p>事实上,<code>vars</code>会为您提供一个字典,其中包含一些已提交的<em>不需要的</em>成员:</p>
<pre><code>class MyBase(object):
def p(self):
print vars(self)
</code></pre>
<p>或者只是:</p>
<pre><code>a = UserTest(name='ehsan', family='shirzadi', age=29)
print vars(a)
</code></pre>
<p>收益率:</p>
<pre><code>{'age': 29, 'name': 'ehsan', 'family': 'shirzadi'}
</code></pre>