Python と YAML を使用すると、誤解の問題が発生します。YAML タグを使用してオブジェクトをGenReport.py定義するファイルがあります。YAML ファイルをReportいじるだけで、すべて正常に動作します。GenReport
しかし、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がファイルBをインポートし、YAMLタグ/定義を保持しているのはファイルBであるファイルAにYAMLファイルを使用して何かをロードするにはどうすればよいですか?
コメントを明確にするために:
で、GenReport次のような YAML タグ識別子を持つオブジェクトを定義しました。
class ManagedInventoryReport(yaml.YAMLObject):
yaml_tag = u'!InventoryReport'
# rest of class details...
など ... ユーザーが YAML ファイルで !InventoryReport オブジェクトを定義し、それらをそのクラスのインスタンスとしてロードできるようにします。