建议正确的python语法

时间:2013-07-02 14:37:45

标签: python django syntax workflow web2py

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

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)

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

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

2 个答案:

答案 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]

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