<p>你不能这样做。方法只是直接在类块中定义的函数。你的函数在另一个函数中,所以它不是一个方法。<code>property</code>修饰符除了在类块中之外是无用的。你知道吗</p>
<p>但是,更基本的是,函数定义只是创建局部名称,与变量赋值或其他任何操作相同。您的<code>valuesonly</code>函数根本无法从<code>get_data_method</code>函数外部访问,因为除了返回值之外,函数内部的任何内容都无法访问。你所做的无异于:</p>
<pre><code>def get_data_method(self):
a = 2
</code></pre>
<p>。然后期望能够从函数外部访问局部变量<code>a</code>。这行不通。调用<code>get_data_method()</code>时,会得到值<code>None</code>,因为<code>get_data_method</code>不会返回任何内容。随后对<code>get_data_method()</code>的结果所做的任何操作都只是对相同的None值进行操作。你知道吗</p>
<p>如果要使用所描述的语法访问对象,则需要使<code>get_data_method</code>返回一个具有<code>valuesonly</code>等属性的对象。换句话说,编写另一个提供<code>valuesonly</code>属性的类,并让<code>get_data_method</code>返回该类的实例。大致轮廓(未经测试):</p>
<pre><code>class DataMethodGetter(object):
def __init__(self, parent):
self.parent = parent
@property
def valuesonly(self):
return format_as_values_only(self.parent.data)
class Testings(object):
# rest of class def here
def get_data_method(self):
self.data = {'blah': 'blah'}
return DataMethodGetter(self)
</code></pre>
<p>然而,你应该想想你为什么要这么做。将其设置为直接在<code>Testing</code>对象上调用<code>valuesonly</code>,或者将标志传递给<code>get_data_method</code>,执行类似于<code>get_data_method(valuesonly=True)</code>的操作,可能会更简单。你知道吗</p>