So if we go the ABC route we would need 3 ABCs. IVMode, NonceMode, and a Mode with neither. Each mode would then derive from the ABC and create_block_cipher_context would then need a method to determine what attribute (if any) is available on the mode object. Does this sound like what you're proposing or have I misunderstood?

```python
class IVMode:
    __metaclass__ = abc.ABCMeta

    @abc.abstractproperty
    def initialization_vector(self):
        # returns: str -- byte string
```