我有一个像这样编写的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。
答案 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
实例。