如何在Python中创建包受保护的构造函数?

时间:2010-12-10 16:32:21

标签: python oop constructor

我想在Python中创建一个工厂模式,其中一个类具有一些配置,并且知道如何构建另一个类'按需提供对象(或几个类)。为了完成这个,我想阻止在工厂外创建创建的类。在Java中,我会将两者都放在同一个包中,并使这个类成为'构造函数包受保护。

对于常规方法名称或变量,可以遵循Python约定并使用单或双下划线(" _foo"或" __ foo")。有没有办法为构造函数做这样的事情?

谢谢

4 个答案:

答案 0 :(得分:3)

你做不到。 Python的心态常常被概括为“我们都是成年人”;也就是说,你无法阻止人们调用方法,更改属性,实例化类等等。相反,你应该明确地构建一个类的实例,然后假设它将被使用。

答案 1 :(得分:2)

不要打扰,这不是Python方式。

首选的解决方案是简单地记录客户端应该调用哪个构造函数或工厂方法,而不必过多担心公共/私有(这在Python中并不重要;一切都基本上是公共代码。 )

答案 2 :(得分:2)

Python中的约定是使用下划线为内部事物的名称(成员或类)添加前缀。没有办法强制执行有限的访问,但是下划线表示你不应该触及这个"。

来自python tutorial

  

Python中不存在除对象内部之外无法访问的“私有”实例变量。但是,大多数Python代码都遵循一个约定:前缀为下划线的名称(例如_spam)应被视为API的非公共部分(无论是函数,方法还是数据成员) 。它应被视为实施细节,如有更改,恕不另行通知。

答案 3 :(得分:1)

根据Wim的评论,可以使用单个或双下划线命名要创建的对象的类。这样很明显构造函数是私有的,不应该直接调用。