我正在尝试设计一个包含类组合的配置模式。 假设我们有一个班级。
class Node(object):
def __init__(self,a,b):
self.a = a
self.b = b
现在我想设计一个配置模式,我希望将其定义为此类或此变体。
Workflow = Node(1,2) & ( Node(4,2) | Node(5,6) ) & Node(1,7)
我实际上想将它保存在一个文件中,然后稍后再选择它,然后中断所有节点并按照此处定义的顺序使用它们。 但这是语法明智的错误。 你能为我建议一些替代方案吗? 我可以使用上面定义的相同模式吗?
我不想使用词典和列表来保存它们,因为它们只提供','作为分隔符。并且字典也没有排序,我将放弃我定义配置或节点的顺序。
答案 0 :(得分:1)
如果您希望能够支持从Workflow
构建Node
的语法,那么您应该可以使用运算符重载来执行此操作。这是Python中的一个优秀的quick reference on operators that can be overloaded。
正如@AshwiniChaudhary所建议的,pickle
模块可以处理将Python对象存储在文件中。
答案 1 :(得分:0)
从您的问题中不确定,但如果要存储任意配置树,我建议您尽可能坚持使用“普通”数据类型。这样,您的配置数据将更容易存储并且更加便携。
关于语义和顺序,你总是可以做这样的事情(有点像Lisp一样):
conf = [
['Workflow',
['and',
['Node', 1, 2],
['or',
['Node', 4, 2],
['Node', 5, 6]
],
['Node', 1, 7]
]
]
]
如果它对你的人类太难看了,你可以使用YAML(不是在核心Python库中;使用PyYaml):
- - Workflow
- - and
- [Node, 1, 2]
- - or
- [Node, 4, 2]
- [Node, 5, 6]
- [Node, 1, 7]
(请注意,我对运算符使用小写,对类使用大写。)