我想用以下参数初始化yaml
from ruamel.yaml import YAML
...
def null_representer(self, data):
return self.represent_scalar(u'tag:yaml.org,2002:null', u'null')
yaml = YAML()
yaml.representer.ignore_aliases = lambda *data: True
yaml.indent(mapping=2, sequence=4, offset=2)
yaml.preserve_quotes = True
yaml.representer.add_representer(type(None), null_representer)
我想知道是否有一种方法可以像这样初始化yaml以便在我的类中使用
class A:
def __init__(self):
self._yaml = (the yaml I initialized)
例如,python日志模块有这个函数-
import logging
def init_logging():
log = logging.getLogger()
log.setLevel(logging.INFO)
sh = logging.StreamHandler()
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s', datefmt='%Y-%m-%d %H:%M:%S')
sh.setFormatter(formatter)
log.addHandler(sh)
class A:
def __init__(self):
self._log = logging.getLogger('A')
如果您希望YAML()
实例是您已经初始化的全局实例,并且类A
在同一文件中的任何位置,您可以执行
def __init__(self):
self._yaml = yaml
只要在yaml
被分配之前不创建A
的实例。
如果在另一个文件中有A
类,只需从Python文件中导入yaml
,就像导入getLogger
一样。例如,如果第一个代码块在myyaml.py
中:
from util.myyaml import yaml
确保在子目录util
__init__.py
文件当然你也可以给A
类一个实例它自己的YAML()
实例:
from ruamel.yaml import YAML
def null_representer(self, data):
return self.represent_scalar(u'tag:yaml.org,2002:null', u'null')
class A:
def __init__(self):
self.yaml.load(.....)
@property
def yaml(self):
try:
return self._yaml
except AttributeError:
pass
self._yaml = yaml = YAML()
yaml.representer.ignore_aliases = lambda *data: True
yaml.indent(mapping=2, sequence=4, offset=2)
yaml.preserve_quotes = True
yaml.representer.add_representer(type(None), null_representer)
return yaml
这是我通常做事的方式。如果__init__()
中没有使用self.yaml
,则YAML()
的实例化将延迟到您第一次使用它时,这可能会加快您的程序启动速度。