擅长:python、mysql、java
<p>一个独立的函数<code>def PersonFactory(name, gender):</code>是很好的,尽管像@Ned所建议的那样,将它打包成一个classmethod应该不会有什么影响(在这种特殊情况下,它也不会有太大帮助,因为要实例化的person的确切类必须有所不同)。我认为最干净的实现实际上是作为一个独立的函数,只是因为我更喜欢使用一个类方法来返回它所调用的类的实例(而不是其他类的实例),但这是一个风格上的问题,不能说是定义得很明确。在</p>
<p>我会对其进行编码(我希望有一些明确的假设,例如,性别编码为<code>M</code>或{<cd3>},如果没有指定,则从名称中推断出来&c):</p>
<pre><code>def gender_from_name(name): ...
person_by_name = {}
class_by_gender = {'M': Man, 'F': Woman}
def person_factory(name, gender=None):
p = person_by_name.get(name)
if p is None:
if gender is None:
gender = gender_from_name(name)
p = person_by_name[name] = class_by_gender[gender](name)
return p
</code></pre>