I am trying to get a module to import, but only if an object of a specific class is called. For example:
class One(object):
try:
import OneHelper
except ImportError:
pass
def __init__(self):
# this function doesn't use OneHelper
...
def blah(self):
# this function does
OneHelper.blah()
This causes a NameError: global name 'OneHelper' is not defined when the One.blah() function is called. So far the only thing I have found that works is importing the module into the actual functions that use it. So:
class One(object):
def __init__(self):
# this function doesn't use OneHelper
...
def blah(self):
try:
import OneHelper
except ImportError:
pass
# this function does
OneHelper.blah()
But I don’t want to have to import the module in each function I want to use it in, I want it to be available to the whole class, but only if an instance of that class is instantiated. Apologies if I’m not being clear enough…
The
import OneHelperworks fine in the class, making it a class attribute. You can verify this withdir(One)after defining your class — there’s yourOneHelperattribute.One.OneHelperis a reference to the module. In an instance, of course, you may access it asself.OneHelperfrom your methods. (You could also continue to access it asOne.OneHelper.)