0

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

4

0 に答える 0