从 Java 转向 Python 后,我被告知工厂不是 Pythonic 的。因此,我正在寻找 a Python 方法来执行如下操作。 (我过于简化了我的目标,这样我就不必描述我的整个程序,这非常复杂)。
我的脚本将读取人名(以及有关他们的一些信息),并据此构造 Person 类型的对象。名称可能会重复,并且我只需要每个名称一个 Person 实例。这些人也可能属于“男人”和“女人”子类。
实现此目的的一种方法是创建一个 PersonFactory,它将返回一个新实例化的 Man 或 Womanor对先前实例化的同名男人/女人的引用。另一种方法是创建一组所有 Person 对象,并在实例化新对象之前每次检查是否存在具有给定名称的 Person。不过,这两种方法都没有让我觉得Pythonic。第一个对于 Python 来说似乎有点太麻烦了(创建整个类只是为了处理另一个对象的创建?真的吗?),而第二个很快就会变得昂贵,因为我有很多名称需要处理。
我不认为工厂是非Pythonic的。不过,你不需要整节课。 Java 和 Python 之间的一大区别是,在 Python 中,您可以在类之外拥有代码。所以你可能想创建一个工厂函数。或者您可以使工厂成为 Person 类上的类方法:
class Person:
name_map = {}
@classmethod
def person_from_name(cls, name):
if name not in cls.name_map:
cls.name_map[name] = cls(name)
return cls.name_map[name]
def __init__(self, name):
etc...
Python 代码中的工作模式通常与 Java 中的工作模式相同,但我们并没有把它看得那么重要。在 Java 中,您将拥有一个全新的类,这意味着一个全新的 .java 文件,并且您需要将其设置为单例,等等。Java 似乎滋生了这种复杂性。一个简单的类方法就可以了,所以只需使用它即可。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)