使用 Python 和 YAML,我遇到了一个误解问题。我有一个使用 YAML 标签GenReport.py
定义对象的文件。Report
当我只是修补GenReport
我的 YAML 文件时,一切都运行良好。
但是当我创建一个名为GenReportDriver.py
(say) 的新文件并导入GenReport
时,现在事情并没有像我预期的那样工作。
在GenReport.py
我定义了一个函数:
# To expose object creation to importing modules.
def create(yaml_file_name):
report_gen = yaml.load_all(file(yaml_file_name))
return report_gen
然后在GenReportDriver.py
我使用以下内容:
import GenReport
class GenReportDriver(object):
def __init__(self, yamlFile):
# Construct the GenReport objects from the YAML specification.
# pdb.set_trace()
self.reports = GenReport.create(yamlFile)
这样做的目的是GenReportDriver
提供我的程序的消费者想要的有用的东西,他们所要做的就是改变他们报告的 YAML 文件。(与将此类控制器功能GenReport
直接存在于报表对象中相反)。
但是,__init__
上面的函数(当我使用调试器时)导致我的变量self.reports
简单地等于我传入的文件名,yamlFile
. 也就是说,它似乎根本无法让 YAML 标记定义存在于GenReport.py
所以我的问题是如何在文件 A 中加载带有 YAML 文件的内容,其中文件 A 已导入文件 B,而文件 B 拥有 YAML 标签/定义?
为了澄清评论:
在GenReport
我已经定义了具有 YAML 标记标识符的对象,例如
class ManagedInventoryReport(yaml.YAMLObject):
yaml_tag = u'!InventoryReport'
# rest of class details...
等等,...这样用户就可以在他们的 YAML 文件中定义 !InventoryReport 对象,并将它们作为该类的实例加载。