如果你已经学习了包,模块这些知识了。 进Shell看看: >>> globals() {'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__doc__': None, '__package__': None}
import __builtin__ >>> globals() {'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__doc__': None, '__builtin__': <module '__builtin__' (built-in)>, '__package__': None}
>>> __builtin__ is __builtins__ True >>> type(__builtin__) <type 'module'> >>> type(__builtins__) <type 'module'>
# file1.py import __builtin__ print "module name __name__ : ", __name__ print "__builtin__ is __builtins__: ", __builtin__ is __builtins__ print "type(__builtin__): ", type(__builtin__) print "type(__builtins__): ", type(__builtins__) print "__builtins__ is __builtin__.__dict__", __builtins__ is __builtin__.__dict__ # file2.py import file1 """结果: module name __name__ : file __builtin__ is __builtins__: False type(__builtin__): <type 'module'> type(__builtins__): <type 'dict'> __builtins__ is __builtin__.__dict__ True """
在主模块中,即没有被其他文件导入。__builtins__是对 __builtin__ 本身的引用,两者是相同的。 通过 __builtins__ is __builtin__.__dict__ 猜想: 装饰内建函数 import __builtin__ def open(path): f = __builtin__.open(path, 'r') return UpperCaser(f) class UpperCaser: __metaclass__ = type def __init__(self, f): self._f = f def read(self): return self._f.read().upper() print open('./a.txt').read() # 将会全部转为大写输出 Note:Python3.X版本中,内建模块更名为builtins,与Python2.X有所不同 |
|