2016-12-14 76 views
0

什么是Python中的良好做法,当我需要初始化包含,例如,大阵列的对象,它应该在对象创建过程中充满了计算值。在Python中是否可以在构造函数中执行此操作,或者这是一种代码异味,我应该使用Factory来代替?这里Pythonic的方式是什么?重物初始化在Python

+0

数组的内容是否为常量,或者对象的每个实例是否都有唯一的数组? FWIW,这个问题可能会被视为“主要基于意见”。假设每个实例都获得一个唯一的数组,我会直接在'__init__'中初始化它,如果它可以在一行或两行中完成的话,否则我会调用另一个方法来初始化它。 –

+0

- 对象的每个实例都获得一个独特的数组,其大小和内容在对象创建期间计算。在c#中,我将为此对象创建创建静态方法CreateX并隐藏构造函数,但在Python中没有私有构造函数,所以我怀疑。 – Brans

+0

您是否打算能够透明地更改正在创建的对象的类别?如果是,请使用工厂模式。否则,我会考虑,如果将计算外包给工厂类,代码是否更清晰(更易读)。 – abukaj

回答

1

如果您可以初始化在几个清晰的代码行的数组,那么这是相当好的直接在__init__方法初始化。否则,请使用单独的方法对其进行初始化。

Python中确实有静态方法和类方法(见here对于一些简单的例子)。您可以使用一个静态方法来初始化数组,但如果初始化方法使用实例的属性在计算中你可能也使它成为一个正常的方法,否则你将需要通过它的值作为参数。

Python没有私有方法,但通常指定一个方法用于私人使用该类,方法是为其指定一个以单个前导下划线开头的名称,例如_init_my_array。如果你的班级的一个用户想要调用他们的方法,但是他们知道这样做可能会导致班级行为失常,除非你知道你在做什么,否则调用这种“私人”方法通常不是个好主意。 。