That discussion aside, I think the design of this particular class would be cleaner as separate subclasses.  Whether or not the interval is open on either side is not really a leaf of its tree (conceptually).  It's more of a property of the object.  Because Python properties don't really fit in with the `obj.__class__(*obj.args)` model, making separate subclasses is (I think) the way to go.  There's only four possibilities, so it's not going to be too much code.  

By the way, there was also work to make Basic versions of True and False (@rlamy was working on it, but I think it stalled for some reason).  But even with that, I would still argue that this design itself is not very good, because it doesn't make sense as a leaf of the Interval expression tree.