如何在Python中创建包保护构造函数?
我想在Python中创建一个工厂模式,也就是说,有一个类负责一些配置,并且知道如何根据需要创建另一个类的对象(或者多个类的对象)。为了做到这一点,我希望防止这个被创建的类在工厂之外被实例化。在Java中,我会把这两个类放在同一个包里,并把类的构造函数设置为包内可访问。
对于普通的方法名或变量名,可以遵循Python的约定,使用单下划线或双下划线(比如“_foo”或“__foo”)。那么,有没有办法对构造函数做类似的处理呢?
谢谢
4 个回答
2
别费心了,这不是Python的做法。
更好的方法是直接说明客户应该调用哪个构造函数或者工厂方法,不用太在意什么是公开的、什么是私有的(在Python里,这些其实没什么大不了的;基本上所有东西在代码里都是公开的)。
3
你不能这样做。Python的思维方式通常可以用“我们都是成年人”来概括;也就是说,你无法阻止别人调用方法、修改属性、创建类的实例等等。相反,你应该提供一个明显的方式来创建你这个类的实例,然后就假设别人会按照这个方式来使用。
1
根据Wim的评论,我们可以给要创建的对象的类起个名字,前面加一个或两个下划线。这样就很明显这个构造函数是私有的,不应该直接调用。