Python模块初始化

6 投票
2 回答
4121 浏览
提问于 2025-04-17 02:09

在模块代码中初始化对象,这样做算不算坏习惯呢?

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

通常情况下,你只需要运行最基本的内容,让你的模块可以使用。这会对性能(加载时间)产生影响,也能让调试变得更简单。
而且,通常从一个类会创建多个实例,也就是多个对象。

不过,如果你有很好的理由(比如只想要一个类的实例),那当然可以在加载时就初始化它。

撰写回答