使用Python和YAML,我有一个误解的问题。我有一个文件GenReport.py
,它使用YAML标记定义Report
对象。当我只是修改GenReport
和我的YAML文件时,一切运行正常。
但是当我创建一个名为GenReportDriver.py
的新文件(比如说)并导入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对象,并将它们作为该类的实例加载。