<p>这样想是不对的。你知道吗</p>
<p>你继承是为了被重用。基类提供了一个其他人可以使用的接口。对于类似文件的对象,它主要是<code>read</code>和<code>write</code>。但是,您只想调用另一个函数<code>simple_parameter</code>。直接调用<code>write</code>可能会弄乱格式。你知道吗</p>
<p>你真的不希望它像文件一样。您想在用户调用<code>simple_parameter</code>时写入文件。实现应该委托给类似对象的成员文件,例如:</p>
<pre><code>class LibFile:
def __init__(self, file):
self.file = file
def simple_parameter(self, param, value):
self.file.write('{}: {}\n'.format(param, value))
</code></pre>
<p>这很容易测试,因为您可以传入任何支持<code>write</code>的内容:</p>
<pre><code>>>> import sys
>>> lib = LibFile(sys.stdout)
>>> lib.simple_parameter('name', 'Stephen')
name: Stephen
</code></pre>
<p>编辑:</p>
<p>如果确实希望类管理文件的生存期,可以提供close函数并使用<a href="https://docs.python.org/2/library/contextlib.html#contextlib.closing" rel="nofollow noreferrer"><strong>^{<cd7>}</strong></a>上下文管理器:</p>
<pre><code>class Formatter:
def __init__(self, filename, mode):
self.file = open(filename, mode)
def close(self):
self.file.close()
</code></pre>
<p>用法:</p>
<pre><code>class LibFormatter(Formatter):
def simple_parameter(self, param, value):
self.file.write('{}: {}\n'.format(param, value))
from contextlib import closing
with closing(LibFormatter('library.txt', 'w')) as lib:
... # etc
</code></pre>
<p>第二次编辑:</p>
<p>如果不想使用<a href="https://docs.python.org/2/library/contextlib.html#contextlib.closing" rel="nofollow noreferrer"><strong>^{<cd7>}</strong></a>,可以编写自己的上下文管理器:</p>
<pre><code>class ManagedFile:
def __init__(self, filename, mode):
self.file = open(filename, mode)
def __enter__(self):
return self
def __exit__(self, *args):
self.close()
def close(self):
self.file.close()
</code></pre>
<p>用法:</p>
<pre><code>class LibFormatter(ManagedFile):
def simple_parameter(self, param, value):
self.file.write('{}: {}\n'.format(param, value))
with LibFormatter('library.txt', 'w') as lib:
... # etc
</code></pre>