2011-09-13 13 views
4

モジュール内のオブジェクトをモジュールコードで初期化するのは悪い習慣ですか? Module.pyPythonモジュールの初期化

:ユーザーコードに比べ

class _Foo(object): 
    def __init__(self): 
     self.x = 'Foo' 

Foo = _Foo() 

、あなたはできます

>>> from Module import Foo 
>>> print Foo.x 
'Foo' 
>>> 

...ユーザーコード内のFooクラスを初期化する必要はありません。もちろん、オブジェクトを初期化するために引数を必要としない場合にのみ便利です。

これを行わない理由はありますか?

+0

インスタンスが1つだけ必要な場合は '@ staticmethod'とクラス変数を使用できます – JBernardo

+0

@JBernardo' staticmethod'とクラス変数を使用することはできません。 'classmethod'とクラス変数を使用できます。それはシングルトンを作成するには貧弱な方法です。 – agf

+0

@agf私はそれがJavaの(悪い)生き方のように見えることは知っていますが、それほど悪くはありません。 – JBernardo

答えて

4

通常、モジュールを使用可能にするために必要な最小限のものを実行したいだけです。これにより、パフォーマンス(ロード時間)に全体的な影響があり、デバッグも容易になります。
また、通常、任意のクラスから複数のインスタンスが作成されます。

あなたは良い理由がある場合(クラスの1つのインスタンスだけが必要な場合など)、ロード時に必ずそれを初期化します。

1

私はこれが本当に便利なときにこれを行うことがありますが、私はfoo = Foo()をする傾向があります。クラスを非公開にしてインスタンスをFooとして利用できるようにするという考えは本当に嫌です。あなたのコードを使用する開発者として、私はそれがかなり戸惑うことがわかります。

+3

何らかの理由でクラスをプライベートにしたい場合でも、インスタンス名のためにはまだ小文字にする必要があります。 – agf

+0

はい、次の[PEP8](http://www.python.org/dev/peps/pep-0008/)は、他のPython開発者の脳を傷めません。 – zeekay

関連する問題