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 オブジェクトを定義し、それらをそのクラスのインスタンスとしてロードできるようにします。