【发布时间】:2016-03-03 06:18:08
【问题描述】:
假设我有一个简单的类定义:
import yaml
class A:
def __init__(self):
self.abc = 1
self.hidden = 100
self.xyz = 2
def __repr__(self):
return yaml.dump(self)
A()
打印
!!python/object:__main__.A
abc: 1
hidden: 100
xyz: 2
有没有一种干净的方法可以从 yaml 转储的打印输出中删除包含 hidden: 100 的行?键名hidden 是预先知道的,但它的数字 值可能会改变。
期望的输出:
!!python/object:__main__.A
abc: 1
xyz: 2
仅供参考:此转储仅用于显示,不会被加载。
我想可以使用yaml.representative 来抑制 key=hidden 的键/值对。另一种方法是在字符串输出中使用 RegEx 查找 hidden: [number]。
【问题讨论】:
-
hidden需要是类的属性吗?它可以是类内的全局变量吗? -
@erip:类中的全局是什么意思?
self.hidden也在类范围内:) -
不要成为
self的成员(即self.hidden = "foo"),而是使用hidden = "foo"使其成为全局类。根据应用程序,这可能不是一个好主意,但这是一个建议。 -
re.sub('hidden: \d+\n', '', s),'\n'.join([l for l in s.splitlines() if not l.startswith('hidden:')]),但我不会那样做,我会寻找一种方法来改变yaml.dump的行为。 -
我认为您使用了错误的工具来完成这项工作。 YAML 用于编码数据(主要是文件)。
__repr__用于显示对象。
标签: python regex string python-3.x yaml