【发布时间】:2018-11-06 08:38:00
【问题描述】:
随着我对 Python 内部结构的深入研究,我开始在文档中更频繁地看到 abc。不幸的是,文档没有解释如何使用它们。我什至无法使用这些抽象基类的“具体实现”。
例如,阅读有关 importlib.abc.SourceLoader 类的信息,您会了解到“is_package”是 InspectLoader.is_package() 的具体实现。但是如果我想在我的代码中使用它呢?可能吗?我尝试了很多方法,但方法无法导入。
ExtensionFileLoader 被记录为 importlib.abc.ExecutionLoader 的具体实现,但如果我尝试使用它(例如:from importlib import Machinery.ExecutionLoader),再次找不到它。
如果这些方法无法导入,为什么要记录它们?是否有任何示例代码来显示如何使用它们?示例:
import importlib.abc.SourceLoader # doesn't work
class try_pkg_check():
def main(self, source_file_name):
possible_pkgs = ['math', 'numpy']
for posbl_pkg in possible_pkgs:
answer = SourceLoader.is_package(posbl_pkg)
print("For {}, the answer is: {}".format(posbl_pkg, answer))
return None
if __name__ == "__main__":
instantiated_obj = try_pkg_check()
instantiated_obj.main()
人们可能会评论说我不应该尝试导入抽象类。但是“is_package”被记录为具体的,所以我应该能够以某种方式使用它,这是我的问题。
【问题讨论】:
-
importlib.abc.ExecutionLoader在importlib.abc中,但from importlib import machinery.ExecutionLoader假定它在importlib.machinery中。 -
实际上,
from importlib import machinery.ExecutionLoader是无效的语法,因此您会得到与“无法找到”不同的错误。您能否向我们展示一些您尝试运行但未达到您预期的实际代码? -
您的问题是以 abc 和 ExecutionLoader 为例,还是您了解 abc 并想了解有关 ExecutionLoader6 的更多详细信息
-
一旦我学会了如何防止在发布代码时删除换行符,我就会发布代码。阅读帮助文档但没有看到它被提及,这很奇怪,因为它应该是第一个涵盖的主题。
标签: python abstract-class abc