Well, if Rule must be constructed in different ways, we could either:
* write multiple (duck)type checks in the constructor (meh...)
* write factory methods, like `Rule.fromNode(type, node)`, `Rule.fromFilename(type, filename)`
* refactor the xml parsing / expression generation methods out of the class, since none of them actually require state. This would leave the Rule class with two methods, `__str__` and `do`, and the constructor would be passed two arguments, the rule type and an `ast.Expression`

What do you think ?