导入模块时会创建Python类

时间:2016-05-16 23:37:06

标签: python

我有一个像这样编写的Python模块。

SomeClasses.py
class A():
    def __init__(self):
        print "Hi! A is instantiated!"

class B():
    def __init__(self):
        print "Hi! B is instantiated!"


a = A()

导入文件时,会自动实例化A类。

>>> import a
Hi! A is instantiated!

现在,大多数情况下,这正是我想要的行为。但是,有时我不希望在导入过程中立即创建整个类,因为开销很大。我考虑过创建一个init()函数。

>>> import SomeClasses
>>> SomeClasses.init()
Hi! A is instantiated!

但是,这会打破大多数预先存在的代码。我想避免重写很多现有的代码库。任何人都可以建议一种在导入时告诉模块不创建类的方法吗?

顺便说一下,我在Windows 7上运行Python 2.7。

1 个答案:

答案 0 :(得分:2)

你可以重构SomeClasses并将大部分内容移到另一个模块中:

# SomeClasses.py

# One of the few legitimate uses of import * outside of an interactive session.
from _SomeClasses import *
a = A()

# _SomeClasses.py
class A(object):
    def __init__(self):
        print "Hi! A is instantiated!"

class B(object):
    def __init__(self):
        print "Hi! B is instantiated!"

然后,如果您不想进行a的昂贵初始化,则导入_SomeClasses并使用该模块。依赖于a现有的其他代码将导入SomeClasses并获取自动创建的a实例。