#!/usr/bin/env python
import os
import sys
import inspect
def load_modules_from_path(path):
"""
Import all modules from the given directory
"""
# Check and fix the path
if path[-1:] != '/':
path += '/'
# Get a list of files in the directory, if the directory exists
if not os.path.exists(path):
raise OSError("Directory does not exist: %s" % path)
# Add path to the system path
sys.path.append(path)
# Load all the files in path
for f in os.listdir(path):
# Ignore anything that isn't a .py file
if len(f) > 3 and f[-3:] == '.py':
modname = f[:-3]
# Import the module
__import__(modname, globals(), locals(), ['*'])
def load_class_from_name(fqcn):
# Break apart fqcn to get module and classname
paths = fqcn.split('.')
modulename = '.'.join(paths[:-1])
classname = paths[-1]
# Import the module
__import__(modulename, globals(), locals(), ['*'])
# Get the class
cls = getattr(sys.modules[modulename], classname)
# Check cls
if not inspect.isclass(cls):
raise TypeError("%s is not a class" % fqcn)
# Return class
return cls
def main():
load_modules_from_path('modules')
# load the TestClass1
class_name = load_class_from_name('class1.TestClass1')
# instantiate the Testclass1
obj = class_name()
# using this object obj to call the attributes inside the class
print obj.testclass1()
if __name__ == '__main__': main()
在modules目录中,我还有两个模块要测试:
^{pr2}$
[♫ test] modules cat class1.py
class TestClass1(object):
def testclass1(self):
print 'I am from testclass1'
def some_function():
print 'some function 1'