又get一个更pythonic的方法

原来自己写一个单独的类文件,常常是文件一个名字,类一个名字,在别的文件导入的时候则需要这样些:

from 文件名 import *
from 文件名 import 类名

今天看这个文章的时候让python程序更加pythonic的建议(一)看到这么一段代码:

class _const:
    class ConstError(TypeError): pass
    class ConstCaseError(ConstError): pass

    def __setattr__(self, name, value):
        if self.__dict__.get(name):
            raise self.ConstError("Can't change const. %s" %name)
        if not name.isupper():
            raise  self.ConstCaseError(\
                'const name "%s" is not all uppercase' %name)
        self.__dict__[name] = value

import sys
sys.modules[__name__] = _const()

最后一句:

sys.modules[__name__] = _const()

其中sys.modules是IDE启动后导入的所有模块的一个字典,__name__则是当前的模块名
关键点就在于__name__在shell模式下是__main__,在被导入的时候是其所在文件的文件名.
所以当上述文件被存为const.py时,我们在别的文件中:import const的时候,const已经是作为类_const的一个实例存在于运行环境中了