Python模块初始化
在模块代码中初始化对象,这样做算不算坏习惯呢?
在 Module.py
文件里:
class _Foo(object):
def __init__(self):
self.x = 'Foo'
Foo = _Foo()
那么在用户代码中,你可以:
>>> from Module import Foo
>>> print Foo.x
'Foo'
>>>
...这样就不需要在用户代码里初始化 Foo 类了。当然,这样做前提是你不需要传入参数来初始化这个对象。
那么,有什么理由不这样做吗?
2 个回答
4
有时候我会这样做,因为这样很方便,但我通常会写成 foo = Foo()
。我不太喜欢把类看起来像是私有的,同时又把实例用 Foo
这个名字暴露出来。作为一个使用你代码的开发者,我觉得这样会让人感到不太舒服。
7
通常情况下,你只需要运行最基本的内容,让你的模块可以使用。这会对性能(加载时间)产生影响,也能让调试变得更简单。
而且,通常从一个类会创建多个实例,也就是多个对象。
不过,如果你有很好的理由(比如只想要一个类的实例),那当然可以在加载时就初始化它。