擅长:python、mysql、java
<p>好问题。我也解决了这个问题,虽然我同意“工厂”(类方法构造函数)是一个很好的方法,但我想建议另一种方法,我也发现它非常有用:</p>
<p>下面是一个示例(这是一个<code>read</code>方法,不是构造函数,但思想是一样的):</p>
<pre><code>def read(self, str=None, filename=None, addr=0):
""" Read binary data and return a store object. The data
store is also saved in the interal 'data' attribute.
The data can either be taken from a string (str
argument) or a file (provide a filename, which will
be read in binary mode). If both are provided, the str
will be used. If neither is provided, an ArgumentError
is raised.
"""
if str is None:
if filename is None:
raise ArgumentError('Please supply a string or a filename')
file = open(filename, 'rb')
str = file.read()
file.close()
...
... # rest of code
</code></pre>
<p>这里的关键思想是使用Python对命名参数的出色支持来实现这一点。现在,如果我想从文件中读取数据,我说:</p>
<pre><code>obj.read(filename="blob.txt")
</code></pre>
<p>要从字符串中读取它,我说:</p>
<pre><code>obj.read(str="\x34\x55")
</code></pre>
<p>这样,用户只需调用一个方法。正如您所看到的,在内部处理它并不太复杂</p>