2011-09-13 117 views
4

在模塊代碼中初始化模塊中的對象是不好的做法嗎?Python模塊初始化

Module.py

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

Foo = _Foo() 

比用戶代碼,你可以:

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

...而無需初始化用戶代碼Foo類。當然,只有當你不需要參數來初始化對象時纔有用。

有沒有理由不這樣做?

+0

如果你只需要一個實例,你可以使用'@ staticmethod'和類變量 – JBernardo

+0

@JBernardo你不能使用'staticmethod'和類變量,你可以使用'classmethod'和類變量。儘管如此,創建單身人士仍然很糟糕。 – agf

+0

@agf我知道它看起來像java的(壞)生活方式......但它並沒有那麼糟糕。 – JBernardo

回答

4

通常,您只需運行使模塊可用的必要最低限​​度。這將對性能(加載時間)產生總體影響,並且還可以使調試更容易。
此外,通常會從任何給定的類創建多個實例。話雖如此,如果你有很好的理由(比如只想要一個類的一個實例),那麼肯定會在加載時初始化它。

1

我有時會這樣做,當它真的很方便,但我傾向於做foo = Foo()。我真的不喜歡讓課堂看起來私密的想法,並將實例提供爲Foo。作爲使用你的代碼的開發人員,我會發現這很令人不安。

+3

即使由於某種原因,您確實希望該類是私有的,您仍然應該爲實例名稱使用小寫。 – agf

+0

是的,因爲遵循[PEP8](http://www.python.org/dev/peps/pep-0008/)使其他Python開發人員的大腦受到的傷害較少。 – zeekay