0

我正在尝试设计一个包含类组合的配置模式。假设我们有一堂课。

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)

我实际上想将它保存在一个文件中,然后稍后再选择它,然后破坏所有节点并按照此处定义的相同顺序使用它们。但这是语法不正确的。你能给我建议一些替代方案吗?我可以使用上面定义的相同模式吗?

我不想使用字典和列表来保存它们,因为它们只提供“,”作为分隔符。而且字典也没有排序,我将失去我定义配置或节点的顺序。

4

2 回答 2

1

如果您希望能够支持WorkflowNodes 构建 a 的语法,那么您应该能够使用运算符重载来做到这一点。这是关于可以在 Python中重载的运算符的极好快速参考。

正如@AshwiniChaudhary 所建议的那样,该pickle模块可以处理将 Python 对象存储在文件中。

于 2013-07-02T14:48:04.420 回答
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]

(请注意,我对运算符使用小写字母,对类使用大写字母。)

于 2013-07-02T15:01:25.720 回答