我很好奇模块中存在的类builtins
无法直接访问的。例如
type(lambda: 0) # __name__='function' of __module__='builtins'
type((lambda: 0).__code__) # __name__='code' (aka. bytecode) of __module__='builtins'
None.__class__ # __name__='NoneType' of __module__='builtins'
还有女族长:
str.__mro__[1] # # __name__='object' of `__module__` 'builtins'
回溯传递给__exit__
上下文管理器的魔术方法是相同的:
def __exit__(self, exc_type: Exception, exc_value: str, exc_traceback: 'bultins.traceback'):
pass
(该模块traceback
是一个模块,只是共享名称,同上tracemalloc.Traceback
)。在上面的对象名称是一个字符串,但这是“隐藏”内置类和类型提示的罕见示例,因为对于function
实例typing.Callable
完成工作。
Q:这些“隐藏”内置类的名称是什么?
据我了解,内置函数是在 CPython 中用 C 编写的。我快速浏览了 CPython Github 存储库,但我不明白为什么不像tuple
他们是“隐藏的”。我使用“类”这个词,因为它们具有相同的魔术方法等,并且像其他类一样工作:
NoneType() == None # True as expected
bytecode = code(...) # bytecode...
fxn = function(bytecode)
Q:它们不在内置函数中是否有 PEP 原因?
如果只是为了阻止命名空间污染,我会认为它们是内置模块或某些模块中带下划线的对象......除非它们在其他地方
Q:可以从其他地方直接进口吗?!